2

次のデータ構造があります。

struct Data {
    int* ptr;
    int a;
    int b;
}

ホストから渡された GPU 上のそのような構造の配列が必要です。それを行う簡単な方法は

thrust::host_vector<Data> h;
... // fill vector 'h'
thrust::device_vector<Data> d = h;

難しいのは、メモリを割り当てるptr方法とそこにデータをコピーする方法です。何か提案はありますか?

4

1 に答える 1

1

@Heatsinkへのコメントに基づいて更新されました。正しく理解できれば、

struct Data {
    int* ptr;
    int a, b;
};

vector<Data> data;

data[0].ptrdata[0].aを含むGPUメモリを指しdata[0].bます。これが正しい場合は、代わりに次の組織をお勧めします。

struct Data {
    int a, b;
};

thrust::host_vector<Data> h;
thrust::device_vector<Data> d = h;

のGPUメモリh[i]は単純d[i]です。要素ごとにGPUメモリへのポインタを格納することはお勧めしません。また、データオブジェクトごとに個別のGPUメモリを割り当てることもお勧めしません(恐ろしく遅くなります)。個別の配列を使用する場合でも、計算コードはおそらく高速になります。 。

一般に、データを構造体の配列ではなく配列の構造として編成することは、位置合わせや負荷の合体の容易さなど、いくつかの理由から推奨されます。

于 2012-04-23T16:59:45.217 に答える