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

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

}

最佳答案

诸如此类的问题时常会被问到。如果您搜索 cuda 标签,您会找到各种带有答案的示例。这是one example .

  • 通常,结构或其他对象中包含的动态分配的数据需要特殊处理。这个question/answer解释了为什么以及如何针对单指针 (*) 情况执行此操作。
  • 处理双指针 (**) 非常困难,大多数人会建议“扁平化”存储,以便可以通过单个指针的引用来处理它 (*)。如果您确实想了解双指针 (**) 方法的工作原理,请查看 this question/answer 。这并非小事。

关于pointers - 将结构中的双指针传递给 CUDA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18185453/

相关文章:

c - 删除链表尾部 : Why a specific approach won't work

c++ - 在 C++ 中删除动态指针数组

java - 两个内容相同的字符串会存储在同一个内存位置吗?

java - 哪个更有效率? (垃圾收集)

编译错误 - 解析错误和不完整类型

c++ - 在其他指针中删除其对象后检查指针是否为 NULL

c++ - 堆指针分配之间的差异

c - 结构困惑

C# 性能因内存而异

json - 为什么 Go json.Marshal 拒绝这些结构标签? json 标签的正确语法是什么?