0

次のように宣言された静的多次元配列に対して、GPU でメモリ (cudaMalloc) を割り当てることができますint b[size1][size2][size3][size4][size5]...;。たとえば、GPU の動的配列にメモリ (cudaMalloc) を割り当てるにはどうすればよいですかint ***a;(より高い次元も想定できます)。aすべてのサイズが異なるのはどこですか? aCPU側でその次元のサイズが割り当てられていると仮定します。簡単な例をいただければ幸いです。ありがとうございます。

4

1 に答える 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 に答える