我想将STL向量中存储的数据复制到Intel Xeon Phi协处理器。在我的代码中,我创建了一个类,其中包含带有计算所需数据的向量。我想在主机上创建类对象,也要在主机上初始化数据,然后再将此对象发送给协处理器。这是简单的代码,这些代码说明了我要执行的操作。将对象复制到协处理器之后,向量为空。可能是什么问题?正确如何?
#pragma offload_attribute (push, target(mic))
#include <vector>
#include "offload.h"
#include <stdio.h>
#pragma offload_attribute (pop)
class A
{
public:
A() {}
std::vector<int> V;
};
int main()
{
A* wsk = new A();
wsk->V.push_back(1);
#pragma offload target(mic) in(wsk)
{
printf("%d", wsk->V.size());
printf("END OFFLOAD");
}
return 0;
}
将对象复制到协处理器时,只有该元素本身的内存(类型为)A
。std::vector
分配一个单独的内存块来存储其元素。在std::vector
嵌入的内部进行A
复制不会复制其元素。我建议不要尝试std::vector
直接使用。您可以复制其元素,但不能复制向量本身。
int main()
{
A* wsk = new A();
wsk->V.push_back(1);
int* data = &wsk->V[0];
int size = wsk->V.size();
#pragma offload target(mic) in(data : length(size))
{
printf("%d", size);
printf("END OFFLOAD");
}
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句