首页 文章

Intel Xeon Phi卸载代码STL向量

提问于
浏览
0

我想将存储在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;
}

1 回答

  • 2

    将对象复制到协处理器时,只复制该元素本身的内存,类型为 A . std::vector 分配一个单独的内存块来存储其元素 . 复制 A 中嵌入的 std::vector 不会复制其元素 . 我建议不要试图直接使用 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;
      }
    

相关问题