CUDA C ++将对象指针指向设备

时间:2017-07-15 23:39:54

标签: c++ cuda thrust

class bead {
int ID;
__host__ __device__ bead(int id){ID=id};
}
void main(void){
vector<bead*> beadvec;
for(int i=0;i<128;i++){
bead* b1=new bead(i);
beadvec.pushback(b1);
}
}

我不确定如何将指针向量(beadvec)复制到设备。 我应该依靠cudaMemCpy和cudaMalloc函数还是有推力函数来有效地执行它* / 在设备代码中,我想访问每个磁珠并对ID进行基本操作。

1 个答案:

答案 0 :(得分:1)

&#39; cuMemcpyHtoD&#39;可用于将对象指针复制到设备。

我在JCuda中复制指向设备的指针:

private void updateArrayPointer(CUdeviceptr arrayPointer, CUdeviceptr[] elementPtrs) {
    JCudaDriver.cuMemcpyHtoD(arrayPointer, Pointer.to(elementPtrs), maxBatchSize * Sizeof.POINTER);
}

此处,&#39; arrayPointer&#39;就像一个漂浮**&#39;在cuda内核中。许多CUdeviceptr(比如float *)首先在CPU上分配给elementPtrs,然后像上面那样调用cuMemcpyHtoD来形成一个“浮动”&#39;在设备上。在64位系统上,Sizeof.POINTER为8。