1

簡単な質問があります。たとえば、推力ベクトルに書いた cuda カーネルを使用したい場合、device_vector を通常のポインター型にキャストする必要がありますか? または別の方法がありますか?

ああ、device_vectorコンストラクターに関して、GPUにポインターが割り当てられている場合、そのポインターを受け入れるクイックdevice_vectorがありますか、それとも最初にすべてをCPUに転送してから、適切な引数でdevice_vectorを宣言することになっていますか(CPU 割り当て変数) ?

ありがとう、イガル!

4

1 に答える 1

1

推力ベクトルに記述した cuda カーネルを使用したいのですが、device_vector を通常のポインター型にキャストする必要がありますか?

次の 2 つのオプションがあります。

  1. ファンクターと一般的なアルゴリズムを使用できます。詳細はマニュアル(pp 18-22) を参照してください。zip_iteratorさんをよく見るようにアドバイスすることもできます
  2. 非標準のアルゴリズムを使用している場合、または既にカーネルを使用している場合は、ベクターをキャストする方が簡単ですraw_pointer(マニュアルp. 11)。

GPU にポインターが割り当てられている場合、そのポインターを受け入れるクイック device_vector はありますか

標準アルゴリズムを使用するには、クラス device_ptr へのポインタをラップできます。次に、device_vector と同じオブジェクトを使用できます。

int N = 10;
// raw pointer to device memory
int * raw_ptr;
cudaMalloc((void **) &raw_ptr, N * sizeof(int));
// wrap raw pointer with a device_ptr
thrust::device_ptr<int> dev_ptr(raw_ptr); // use device_ptr in thrust algorithms
thrust::fill(dev_ptr, dev_ptr + N, (int) 0); // access device memory through device_ptr
dev_ptr[0] = 1;
// free memory
cudaFree(raw_ptr);

マニュアルpからのコード。12.

于 2011-11-06T09:06:50.243 に答える