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

Hel*_*ang 8 memory memory-management cuda gpu

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

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

我想到的另一种可能性是将设备内存映射到内存映射的主机内存。由于它是内存映射的,因此可以在两个进程之间共享。这有意义/可能吗,并且有开销吗?

Rob*_*lla 7

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

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

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

这将允许您cudaMalloc在多个进程之间共享分配的设备内存区域(即,通过分配的内存区域)。 该答案包含其他资源,以了解CUDA IPC。

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

  • 我没有说“共享 cuda 上下文不会启用共享设备内存”。我说过 *CUDA MPS* 不支持共享设备内存。如果您想了解共享 cuda 上下文是否允许共享设备内存,则必须更具体。对于同一进程中的两个线程,它们可以共享相同的上下文。CUDA 没有提供任何方法让两个单独的进程共享相同的上下文。如果您认为存在这种情况,请具体说明并确定如何在两个单独的进程之间共享相同的 cuda 上下文。 (3认同)