我使用cudaMalloc来分配大小为100的整数数组,即我有
的总数int_total_bytes=100*sizeof(int),
并分配大小为1000的双精度数组,即总数为
db_total_bytes=1000*sizeof(double),...
我可以确定gpu上使用的全局内存总数
int_total_bytes+db_total_bytes?
谢谢!
答案 0 :(得分:1)
由于添加了填充以实现最佳地址对齐或由于最小块大小,有几种情况可能会使分配的内存实际大小大于计算的大小。
对于您提供的两个示例,数据大小与自然对齐大小和边界兼容,因此您可能不会发现计算内存和实际内存之间存在太大差异。但是,如果cudaMalloc使用子分配器,则可能仍然存在一些变化 - 如果它从OS(或设备)分配大块,则将该大块细分为较小的块以填充cudaMalloc()请求。
如果涉及子分配器,则操作系统将显示实际内存使用量远大于计算使用量,但实际使用情况将保持稳定,即使您的应用程序进行多次小分配(可以从已分配的大型分配中填充)块)。
类似地,硬件通常具有最小分配大小,该大小通常与内存页大小相同。如果可以从硬件分配的最小内存块是64K,那么当你要求3k时,你已经分配了61K而没有被使用。这是子分配器有用的地方,以确保尽可能多地使用你分配的内存块。
答案 1 :(得分:0)
除了dthorpe所说的,您还可以使用nvidia-smi
命令检查进程的GPU内存使用情况。