私はスラストベクトルに書いたcudaカーネルを使いたいのですが、device_vectorを通常のポインタ型にキャストする必要がありますか?
- あなたはファンクタと一般的なアルゴリズムを使用することができます。
あなたは、2つのオプションがあります。詳細in manual(pp 18-22)。また、私はできますが、非標準のアルゴリズムを持っているか、あなたはすでに カーネルを持っている場合(manualのp。11)raw_pointer
にベクトルをキャストするために、よりシンプルになり、近いzip_iterator
の
に見てアドバイス
私はGPUに割り当てられたポインタを持っている場合、あなたはクラスdevice_ptrへのポインタをラップすることができスタンダールアルゴリズムを使用するにはそのポインタ
を受け付け、迅速device_vectorがあります。次に、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);
コードmanual p。 12.