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

问题描述:

在CPU世界中,可以通过内存映射来完成。可以为GPU做类似的事情吗?可以两个进程共享相同的GPU内存吗? (CUDA)

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

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

+0

@RobertCrovella:这可能是一个很好的答案,任何人都可以提供。如果你想添加它,我会愉快地上传它 – talonmies

CUDA MPS有效地允许来自2个或更多进程的CUDA活动在GPU上共享相同的上下文。然而,这不会提供你所要求的:

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

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

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

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

+0

你能否详细说明为什么共享cuda上下文不启用共享设备内存?是否即使cuda上下文相同,B进程中的设备内存指针的值仍然没有意义? –

+0

我没有说“共享cuda环境不支持共享设备内存”。我说* CUDA MPS *不支持共享设备内存。如果您想了解共享cuda环境是否允许共享设备内存,则必须更具体。对于同一个进程中的两个线程,他们可以共享相同的上下文。 CUDA不提供两种单独进程共享相同上下文的方法AFAIK。如果您认为有一个,请具体说明,并确定如何在两个独立流程之间共享相同的cuda环境。 –