使用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内核上处理。有可能吗?
答案 0 :(得分: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
中每个设备向量的原始指针。如果你真的想要,可以将它传递给内核。