两个进程可以共享相同的 GPU 内存吗? (CUDA)

can two process shared same GPU memory? (CUDA)

在CPU 世界中,可以通过内存映射来实现。 GPU 可以做类似的事情吗?

如果两个进程可以共享同一个 CUDA 上下文,我认为这将是微不足道的 - 只需传递 GPU 内存指针即可。是否可以在两个进程之间共享相同的 CUDA 上下文?

我能想到的另一种可能性是将设备内存映射到内存映射主机内存。因为它是内存映射的,所以它可以在两个进程之间共享。这是否有意义/可能,是否有任何开销?

CUDA MPS 有效地允许来自 2 个或更多进程的 CUDA activity 在 GPU 上共享相同的上下文。但是,这不会满足您的要求:

can two processes share the same GPU memory?

实现此目的的一种方法是通过 CUDA IPC(进程间通信)API。

这将允许您在多个进程之间共享分配的设备内存区域(即通过 cudaMalloc 分配的内存区域)。 This answer 包含了解 CUDA IPC 的额外资源。

但是,根据我的测试,这不会在多个进程之间共享主机固定内存区域(例如,通过 cudaHostAlloc 分配的区域)。内存区域本身可以使用可用于特定 OS 的普通 IPC 机制共享,但不能使其在 2 个或更多进程中显示为 "pinned" 内存(根据我的测试)。