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 タグで検索すると、さまざまな例と回答が見つかります。ここに一例があります。

  • 一般に、構造体またはその他のオブジェクトに含まれる動的に割り当てられたデータには、特別な処理が必要です。この質問/回答*では、単一ポインター ( ) の場合の理由とその方法について説明します。
  • ダブル ポインター ( **) の処理は非常に難しいため、ほとんどの人はストレージを "フラット化" して、単一のポインター ( *) で参照によって処理できるようにすることをお勧めします。**double pointer ( ) メソッドがどのように機能するかを本当に知りたい場合は、この質問/回答を確認してください。それは些細なことではありません。
于 2013-08-12T14:47:34.010 に答える