gpu上的动态多维数组alloc

时间:2012-07-20 22:22:43

标签: c cuda

我可以在GPU上为静态多维数组分配内存(cudaMalloc),对于声明如下int b[size1][size2][size3][size4][size5]...;的数组。如何在GPU上为动态数组分配内存(cudaMalloc),例如int ***a;(我们也可以假设更高的维度),其中a的所有大小都是不同的?假设已在CPU端为a分配了其维度的大小。简单的例子将不胜感激,谢谢!

1 个答案:

答案 0 :(得分: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

(对于二维或三维数组,您可能还想使用cudaMalloc3DArray。)

还有一个相应的主机版本cudaMallocHost,它分配了可由设备直接访问的页面锁定主机内存。