次のように宣言された静的多次元配列に対して、GPU でメモリ (cudaMalloc) を割り当てることができますint b[size1][size2][size3][size4][size5]...;
。たとえば、GPU の動的配列にメモリ (cudaMalloc) を割り当てるにはどうすればよいですかint ***a;
(より高い次元も想定できます)。a
すべてのサイズが異なるのはどこですか? a
CPU側でその次元のサイズが割り当てられていると仮定します。簡単な例をいただければ幸いです。ありがとうございます。
質問する
474 次
1 に答える
1
cudaMallocを使用して、メモリを動的に割り当てます。高次元配列の場合は、フラット化された合計サイズを計算し、ストライドで配列にアクセスします。
void * p;
cudaError_t e = cudaMalloc(&p, dim1 * dim2 * dim3 /* ... */);
if (e != cudaSuccess) { /* error! */ }
// Access
int * arr = p;
arr[i1 * dim2 * dim3 + i2 * dim3 + i3] = 2; // etc., in strides
(2次元または3次元配列の場合は、cudaMalloc3DArrayを使用することもできます。)
対応するホストバージョンであるcudaMallocHostもあります。これは、デバイスから直接アクセスできるページロックされたホストメモリを割り当てます。
于 2012-07-20T22:27:06.387 に答える