在新创建的流程中初始化CUDA可能需要花费相当长的时间as long as a half-second或更多时间在当今的许多服务器级机器上。作为@RobertCrovella explains,CUDA初始化通常包括建立统一内存模型,该模型涉及设备和主机内存映射的协调。对于具有大量内存的机器,这可能需要相当长的时间;并且可能还有其他因素导致这种长时间延迟。
当您想要运行一系列不使用复杂虚拟内存映射的CUDA进程时,此效果会变得非常烦人:他们每个人都必须等待他们漫长的等待 - 尽管事实上"本质上&# 34;,他们可以重新使用CUDA最后一次初始化(也许是一些清理代码)。
现在,显然,如果你以某种方式重写了所有这些进程的代码,以便在单个进程中执行 - 这将节省那些长的初始化成本。但是,有没有更简单的方法?怎么样:
答案 0 :(得分:2)
您所询问的内容已经存在。它被称为MPS(MULTI-PROCESS SERVICE),它基本上使用模拟驱动程序API的守护程序进程保持单个GPU上下文的活动状态。最初的目标应用程序是MPI,但它确实基本上符合您的设想。
在这里阅读更多内容:
https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf
http://on-demand.gputechconf.com/gtc/2015/presentation/S5584-Priyanka-Sah.pdf