CUDA 堆与全局内存

CUDA Heap vs Global memory

我正在玩 cudaDeviceSetLimit(),试图查看允许为我的 GPU 设置的最大大小。

这里我得到了意想不到的结果:

堆大小在 17.6 Gb 后停止增加,所以我想这是我可以设置的最大值。 但是由于我的 GPU 只有 16 Gb 的内存(通过查询设备道具确认),堆大小怎么可能更大?

限制与实际内存大小无关。仅仅因为您可以设置一个特定的限制并不意味着您将有那么多可用内存来分配。这应该是不言而喻的。我可以将堆限制设置为 14GB,然后对 14GB 执行 cudaMalloc 操作。如果我的 GPU 只有 16GB,这两个操作都可以成功,但这并不意味着我实际上有 14GB 的堆space“保留”。

可用堆的数量 space 是堆限制(减去任何已完成的堆分配)和此时实际可用的 GPU 内存中较小的一个。