在一个GPU上运行多个CUDA应用程序

cac*_*che 24 cuda gpu gpgpu nvidia

CUDA文档没有具体说明有多少CUDA进程可以共享一个GPU.例如,如果同一个用户在系统中只安装了一个GPU卡的情况下启动了多个CUDA程序,效果如何?它会保证执行的正确性吗?在这种情况下,GPU如何安排任务?

Rob*_*lla 35

来自独立主机进程的CUDA活动通常会创建独立的CUDA 上下文,每个进程一个.因此,从单独的主机进程启动的CUDA活动将在同一设备上的单独CUDA上下文中进行.

单独上下文中的CUDA活动将被序列化.GPU将从一个进程执行活动,并且当该活动空闲时,它可以并且将上下文切换到另一个上下文以完成从另一个进程启动的CUDA活动.未指定详细的上下文调度行为.(在单个GPU上运行多个上下文通常也不会违反基本的GPU限制,例如设备分配的内存可用性.)

这种情况的"例外"(来自独立主机进程的GPU活动的序列化)将是CUDA多进程服务器.简而言之,MPS充当"漏斗",用于收集来自多个主机进程的CUDA活动,并运行该活动,就好像它来自单个主机进程一样.主要好处是避免可能同时运行的内核序列化.规范用例将用于启动所有打算使用单个GPU资源的多个MPI等级.

注意,以上描述适用于处于"默认" 计算模式的 GPU ."独占进程"或"独占线程"计算模式下的GPU将拒绝在单个设备上创建多个进程/上下文的任何尝试.在其中一种模式中,其他进程尝试使用已在使用的设备将导致CUDA API报告失败.在某些情况下,使用nvidia-smi实用程序可以修改计算模式.

  • 这个答案是否已经过时,或者在 2023 年与新的 GPU 架构仍然相关? (4认同)