0

我想将存储在 STL 矢量中的数据复制到英特尔至强融核协处理器。在我的代码中,我创建了包含计算所需数据的向量的类。我想在主机上创建类对象,也在主机上初始化数据,然后我想将此对象发送到协处理器。这是一个简单的代码,它说明了我想要做什么。将对象复制到协处理器后,向量为空。有什么问题?如何正确执行?

#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;
}
4

1 回答 1

2

当一个对象被复制到协处理器时,只有那个元素本身的内存,它的类型是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;
  }
于 2015-06-26T16:55:21.737 回答