我在gpu上使用CUDA执行320 * 320阵列乘法。我观察到使用了固定数量的内存,这是不明确的。例如在640 * 640阵列乘法中,考虑到每个元素占用4个字节,并且我们在代码中有3个这样的数组,应该消耗大约5 MB的GPU内存。但是当我用nvidia-smi命令检查时,它显示我消耗了53MB。这48 MB是下落不明的。对于1200 * 1200或任何其他可能的尺寸,情况也是如此。
答案 0 :(得分:4)
CUDA驱动程序维护许多设备内存分配,包括但不限于
驱动程序会在必要时推迟创建这些缓冲区。这通常意味着内存分配将在其中一个API调用中完成,以启动内核。
可以通过cudaDeviceSetLimit在某种程度上控制第1,2和3项。
项目4随着分配的流数量和加载的模块线性增长。在每个体系结构的不同点,驱动程序将启动别名流常量缓冲区以限制资源分配。