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 数组传递给一维数组,以便在 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 回答