【问题标题】:cuda: total global memory usagecuda:全局内存使用总量
【发布时间】:2012-08-06 22:06:59
【问题描述】:

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

int_total_bytes=100*sizeof(int), 

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

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

我能确定 gpu 上使用的全局内存总量是

int_total_bytes+db_total_bytes?

谢谢!

【问题讨论】:

标签: cuda


【解决方案1】:

由于为实现最佳地址对齐而添加的填充或由于最小块大小而导致分配的实际内存大小大于计算大小的几种情况。

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

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

同样,硬件通常具有最小分配大小,通常与内存页面大小相同。如果可以从硬件分配的最小内存块是 64K,那么当您要求 3k 时,您得到的 61K 已分配但未使用。这是子分配器有用的地方,以确保您尽可能多地使用您分配的内存块。

【讨论】:

    【解决方案2】:

    除了 dthorpe 说的,你还可以通过nvidia-smi 命令查看某个进程的 GPU 内存使用情况。

    【讨论】:

    • 或在代码中使用NVML 使用nvmlDeviceGetMemoryInfo 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2012-01-08
    • 2015-08-22
    • 2020-08-17
    相关资源
    最近更新 更多