c - GPU上的动态多维数组分配

标签 c cuda

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

最佳答案

使用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 ,它分配可由设备直接访问的页锁定主机内存。

关于c - GPU上的动态多维数组分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587704/

相关文章:

c - 在销毁它之前确保没有线程在等待临界区

c - 是否有可能在 C 中实现无限编译时间(即没有模板)?

c - 等待子进程的一部分完成?

cuda - GPU 合并全局内存访问与使用共享内存

使用 CUDA 的 matlab if 语句

cuda - 如何在 Java 编程中使用 GPU

cuda - 如何在 CUSPARSE 中处理复数?

c++ - 从 llvm pass 打印点文件

c - c中的字符串比较

cuda - 初学者最简单的 CUDA 包装器