cuda - 任何保证 Torch 不会弄乱已经分配的 CUDA 数组?
问题描述
假设我们通过 PyTorch 以外的其他方式在 GPU 上分配了一些数组,例如使用numba.cuda.device_array
. PyTorch 在为某些张量分配稍后的 GPU 内存时,是否会意外覆盖用于我们的第一个 CUDA 数组的内存空间?一般来说,由于 PyTorch 和 Numba 使用相同的 CUDA 运行时,因此我假设相同的内存管理机制,它们是否会自动知道其他 CUDA 程序使用的内存区域,还是每个人都将整个 GPU 内存视为自己的?如果是后者,有没有办法让他们知道其他 CUDA 程序的分配?
编辑:认为这将是一个重要的假设:假设所有分配都是由同一个过程完成的。
解决方案
PyTorch 在为某些张量分配稍后的 GPU 内存时,是否会意外覆盖用于我们的第一个 CUDA 数组的内存空间?
不。
他们是否会自动知道其他 CUDA 程序使用的内存区域...
他们没有“意识到”,但每个进程都有自己独立的上下文......
... 还是他们每个人都将整个 GPU 内存视为自己的?
.... 和上下文有自己的地址空间和隔离。所以两者都不是,但没有内存损坏的风险。
如果是后者,有没有办法让他们知道其他 CUDA 程序的分配?
如果“意识到”是指“安全”,那么这会自动发生。如果通过“意识到”您暗示某种互操作性,那么这在某些平台上是可能的,但它不是自动的。
...假设所有分配均由同一进程完成。
那是另一种情况。一般来说,同一个进程意味着一个共享上下文,共享上下文共享一个内存空间,但所有正常的地址空间保护规则和设施都适用,因此不存在失去安全性的风险。
推荐阅读
- c++ - 联合铸造初始化和引用内部结构
- c# - 将数据从unity发送到sql数据库
- mongodb - 如何解组非平凡的 mongo 返回 bson 结构
- reactjs - 我不断收到“handleColor”不是函数错误
- javascript - lb4 调用不同存储库中的另一个存储库
- android - Android 的 OnKeyDown 在 Delphi 10.4.1 中不起作用
- c - gcc -O2 创建一个无限循环,可能是因为未定义的行为
- python - Python 机器学习 - 基于规则的匹配
- reactjs - React 从基于 id 的路由重定向到 404 路由
- apache - 将旧搜索重定向到新搜索并保留第一个参数