我有以下结构:
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/