可以在CPU的多个内核之间共享GPU吗?

时间:2014-10-21 12:43:32

标签: mpi cpu gpgpu

我有一个应用程序,其中每个CPU内核执行许多矩阵乘法。矩阵乘法的数量可以是10s的量级,例如, 50.由于这些乘法彼此独立,因此核心可以将它们卸载到GPU。现在,MPI程序使用了几个这样的核心。所以,我的问题是,是否有可能在这些多核之间共享GPU,因此每个核可以将矩阵乘法卸载到同一个GPU?

2 个答案:

答案 0 :(得分:2)

是的,这是可能的,除非您的GPU代码已在内部高度优化,否则这通常是提高GPU利用率的简单方法。但是每个进程都需要一个单独的GPU上下文,它具有相当大的内存开销,并且不可能跨这些不同的进程创建共享的mempool(或者至少它会是一个巨大的痛苦)。如果记忆完全受到限制,那么这远非最佳。

因此,如果不关心内存,这可能是提高GPU利用率最直接的方法。但是,我发现每个GPU使用一个进程通常更干净,然后使用每个GPU流一个线程/协程来分配独立任务。

答案 1 :(得分:1)

对于Nvidia GPU,此功能称为多进程服务(MPS)。您必须在计算机上启动一个服务器,该服务器处理来自所有MPI排名的GPU请求并将它们传递给单个GPU。命令是nvidia-cuda-mps-control。它在这里描述。 https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf