2

我有以下结构:

 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);

}
4

1 回答 1

3

像这样的问题不时被问到。如果您在 cuda 标签上进行搜索,您会发现各种带有答案的示例。这是一个例子

  • 通常,包含在结构或其他对象中的动态分配的数据需要特殊处理。这个问题/答案解释了为什么以及如何针对单指针 ( *) 情况执行此操作。
  • 处理双指针 ( **) 非常困难,以至于大多数人会建议“扁平化”存储,以便可以通过使用单个指针 ( *) 的引用来处理它。如果您真的想了解双指针 ( **) 方法的工作原理,请查看此问题/答案。这不是微不足道的。
于 2013-08-12T14:47:34.010 回答