Thrust ライブラリを使用して、CUDA でデバイス配列のプレフィックスの合計を計算したいと考えています。私の配列は で割り当てられcudaMalloc()
ます。私の要件は次のとおりです。
main()
{
Launch kernel 1 on data allocated through cudaMalloc()
// This kernel will poplulate some data d.
Use thrust to calculate prefix sum of d.
Launch kernel 2 on prefix sum.
}
カーネル間のどこかで Thrust を使用したいので、ポインタをデバイス イテレータに変換して元に戻すメソッドが必要です。次のコードで何が問題になっていますか?
int main()
{
int *a;
cudaMalloc((void**)&a,N*sizeof(int));
thrust::device_ptr<int> d=thrust::device_pointer_cast(a);
thrust::device_vector<int> v(N);
thrust::exclusive_scan(a,a+N,v);
return 0;
}