0

STL ベクトルに格納されたデータをインテル 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;
}
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 に答える