2

「cuda c プログラミング ガイド」には、cuda 配列の使用例が示されています。これらの例は 2D に限定されています。したがって、2D cuda 配列の場合、次のようにしてホスト データをデバイス メモリにコピーします。

// Copy to device memory some data located at address h_data in host memory  
// cuInputArray is a 2D cuda array
cudaMemcpyToArray(cuInputArray, 0, 0, host_data, size_bytes, cudaMemcpyHostToDevice);
// with e.g. size_bytes := size_arr_x * size_arr_y * sizeof(float)

3D cuda 配列である cuInputArray で同じアプローチを試みましたが、あまり成功せず、無効な引数エラーが発生しました。

では、ホスト データをデバイス メモリに取得して戻すにはどうすればよいでしょうか。

4

1 に答える 1

1

3D データを GPU デバイス メモリにコピーするには、次の手順を実行する必要があります。

  1. でメモリ空間を割り当てますcudaMalloc3D
  2. で入力パラメータを設定しますcudaMemcpy3DParms
  3. 入力データをホストからデバイスにコピーするcudaMemcpy3D

次に、データをホストに戻すには:

  1. で出力パラメータを設定しますcudaMemcpy3DParms
  2. 出力データをデバイスからホストにコピーするcudaMemcpy3D

CUDA C Programming Guide の Chapter 3.2.2 Device Memory には、幅×高さ×深さの浮動小数点値の 3D 配列を割り当て、デバイス コードで配列要素をループする方法を示すコード サンプルがあります

また、simpleTexture3DCUDA SDK の例も良い出発点です。

単なる推奨事項:CUDAエラーをキャッチするコードを準備し、エラーが発生した場合に何が起こっているかを分析します。おそらくいくつか見つかるからです。

于 2012-06-29T15:18:49.957 に答える