1

device_vectorの使用:

thrust::device_vector< int > iVec;
int* iArray = thrust::raw_pointer_cast( &iVec[0] );

しかし、device_vectorsの配列がある場合、どうすればそれを行うことができますか?

thrust::device_vector<int> iVec[10];

理想的には、device_vectorの配列を1D配列に渡して、CUDAカーネルで処理したいと思います。出来ますか?

4

1 に答える 1

1

私があなたの質問を正しく理解しているなら、あなたが本当にやろうとしていることは、の配列から生のポインタの配列を作成することですthrust::device_vectors。あなたはそのようにこれを行うことができるはずです:

const int N = 10;
thrust::device_vector<int> iVec[N];

int * iRaw[N];
for(int i=0; i<N; i++)
    iRaw[i] = thrust::raw_pointer_cast(iVec[i].data());

int ** _iRaw;
size_t sz = sizeof(int *) * N;
cudaMalloc((void ***)&_iRaw, sz);
cudaMemcpy(_iRaw, iRaw, sz, cudaMemcpyHostToDevice);

[免責事項:ブラウザで記述され、コンパイルされておらず、テストされておらず、自己責任で使用してください]

上記のコードスニペットで_iRawは、の各デバイスベクトルの生のポインタを保持しiVecます。本当に必要な場合は、それをカーネルに渡すことができます。

于 2012-10-17T16:33:37.633 に答える