将结构中的双指针传递给CUDA

时间:2013-08-12 11:08:24

标签: pointers memory-management struct cuda

我有以下结构:

 struct Param
{
double** K_RP;                              
};

我想在CUDA中对“K_RP”执行以下操作

 __global__  void Test( struct Param prop)
       {
       int ix = threadIdx.x;
       int iy = threadIdx.y;
       prop.K_RP[ix][iy]=2.0;
       }

如果“prop”具有以下形式,我该如何进行“cudaMalloc”和“cudaMemcpy”操作?

int main( )
{
Param prop;
Param cuda_prop;

prop.K_RP=alloc2D(Imax,Jmax);

//cudaMalloc cuda_prop ?

//cudaMemcpyH2D prop to cuda_prop ?

Test<<< (1,1), (Imax,Jmax)>>> ( cuda_prop);   

//cudaMemcpyD2H cuda_prop to prop ?

return (0);

}

1 个答案:

答案 0 :(得分:3)

这样的问题不时被问到。如果您搜索cuda标签,您会找到各种带答案的示例。这是one example

  • 通常,结构或其他对象中包含的动态分配数据需要特殊处理。这个question/answer解释了为什么以及如何为单指针(*)案例执行此操作。
  • 处理双指针(**)很困难,以至于大多数人会建议“展平”存储,以便可以通过单个指针(*)进行处理。如果您真的想看看双指针(**)方法的工作原理,请查看this question/answer。这不是一件轻而易举的事。