首页 > 解决方案 > 任何保证 Torch 不会弄乱已经分配的 CUDA 数组?

问题描述

假设我们通过 PyTorch 以外的其他方式在 GPU 上分配了一些数组,例如使用numba.cuda.device_array. PyTorch 在为某些张量分配稍后的 GPU 内存时,是否会意外覆盖用于我们的第一个 CUDA 数组的内存空间?一般来说,由于 PyTorch 和 Numba 使用相同的 CUDA 运行时,因此我假设相同的内存管理机制,它们是否会自动知道其他 CUDA 程序使用的内存区域,还是每个人都将整个 GPU 内存视为自己的?如果是后者,有没有办法让他们知道其他 CUDA 程序的分配?

编辑:认为这将是一个重要的假设:假设所有分配都是由同一个过程完成的。

标签: cudapytorchtorchnumba

解决方案


PyTorch 在为某些张量分配稍后的 GPU 内存时,是否会意外覆盖用于我们的第一个 CUDA 数组的内存空间?

不。

他们是否会自动知道其他 CUDA 程序使用的内存区域...

他们没有“意识到”,但每个进程都有自己独立的上下文......

... 还是他们每个人都将整个 GPU 内存视为自己的?

.... 和上下文有自己的地址空间和隔离。所以两者都不是,但没有内存损坏的风险。

如果是后者,有没有办法让他们知道其他 CUDA 程序的分配?

如果“意识到”是指“安全”,那么这会自动发生。如果通过“意识到”您暗示某种互操作性,那么这在某些平台上是可能的,但它不是自动的。

...假设所有分配均由同一进程完成。

那是另一种情况。一般来说,同一个进程意味着一个共享上下文,共享上下文共享一个内存空间,但所有正常的地址空间保护规则和设施都适用,因此不存在失去安全性的风险。


推荐阅读