使用 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 内核上处理。可能吗?
如果我正确理解了您的问题,那么您真正想做的是从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
. 如果你真的想的话,你可以把它传递给内核。