【问题标题】:Pass double pointer in a struct to CUDA将结构中的双指针传递给 CUDA
【发布时间】:2013-08-12 11:08:24
【问题描述】:

我有以下结构:

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

}

【问题讨论】:

    标签: pointers memory-management struct cuda


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2021-07-17
      • 2012-02-05
      相关资源
      最近更新 更多