我可以在 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 回答