2013-08-12 55 views
2

我有下面的结构双指针:传递一个结构来CUDA

struct Param 
{ 
double** K_RP;        
}; 

而且我想在CUDA

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

的“K_RP”执行以下操作如果“托”具有以下形式,我应该如何执行“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); 

} 

回答

3

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

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