将device_vectors的数组推送到raw_pointer

时间:2012-10-17 11:14:55

标签: cuda gpu gpgpu nvidia thrust

使用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内核上处理。有可能吗?

1 个答案:

答案 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中每个设备向量的原始指针。如果你真的想要,可以将它传递给内核。