cuda:全局内存总使用量

时间:2012-08-06 22:06:59

标签: cuda

我使用cudaMalloc来分配大小为100的整数数组,即我有

的总数
int_total_bytes=100*sizeof(int), 

并分配大小为1000的双精度数组,即总数为

db_total_bytes=1000*sizeof(double),... 

我可以确定gpu上使用的全局内存总数

int_total_bytes+db_total_bytes?

谢谢!

2 个答案:

答案 0 :(得分:1)

由于添加了填充以实现最佳地址对齐或由于最小块大小,有几种情况可能会使分配的内存实际大小大于计算的大小。

对于您提供的两个示例,数据大小与自然对齐大小和边界兼容,因此您可能不会发现计算内存和实际内存之间存在太大差异。但是,如果cudaMalloc使用子分配器,则可能仍然存在一些变化 - 如果它从OS(或设备)分配大块,则将该大块细分为较小的块以填充cudaMalloc()请求。

如果涉及子分配器,则操作系统将显示实际内存使用量远大于计算使用量,但实际使用情况将保持稳定,即使您的应用程序进行多次小分配(可以从已分配的大型分配中填充)块)。

类似地,硬件通常具有最小分配大小,该大小通常与内存页大小相同。如果可以从硬件分配的最小内存块是64K,那么当你要求3k时,你已经分配了61K而没有被使用。这是子分配器有用的地方,以确保尽可能多地使用你分配的内存块。

答案 1 :(得分:0)

除了dthorpe所说的,您还可以使用nvidia-smi命令检查进程的GPU内存使用情况。