并发性,4个CUDA应用程序竞争获取GPU资源

6
如果有四个并发的CUDA应用程序在单个GPU上竞争资源,它们可以将工作卸载到图形卡中,那会发生什么呢?Cuda编程指南3.1提到了某些异步方法:
- 内核启动 - 设备设备内存复制 - 小于64 KB的内存块的主机设备内存复制 - 以Async结尾的函数执行的内存复制 - 内存设置函数调用
此外,它还提到,具有计算能力2.0的设备能够同时执行多个内核,只要内核属于同一上下文即可。
这种并发类型是否仅适用于单个CUDA应用程序中的流,而不可能在完全不同的应用程序请求GPU资源时发生?
这是否意味着并发支持仅在1个应用程序(上下文?)中可用,并且4个应用程序将以方法可能被CPU上下文切换重叠的方式并发运行,但需要等待其他应用程序释放GPU?(例如,来自app1的内核启动等待来自app4的内核启动完成..)
如果是这种情况,这4个应用程序如何访问GPU资源而不会遭受长时间的等待时间?

我有一个非常类似的问题:https://stackoverflow.com/questions/57416664/nvidia-cuda-gpu-context-switch-among-multiple-processes。你能解答一下吗?谢谢! - kz28
1个回答

4
正如你所说,每个引擎只能同时占用一个“上下文”。这意味着一个复制引擎可以为应用程序A提供memcpy服务,另一个复制引擎可以为应用程序B提供memcpy服务,而计算引擎可以执行应用程序C的内核(例如)。
一个应用程序实际上可以有多个上下文,但是没有两个应用程序可以共享相同的上下文(尽管应用程序中的线程可以共享上下文)。
任何调度在GPU上运行的工作(即memcpy或内核启动)的应用程序都可以将工作异步地调度,以便该应用程序可以自由地继续在CPU上进行其他工作,并且它可以调度任意数量的任务在GPU上运行。
请注意,还可以将GPU置于“独占模式”,其中仅一个上下文可以在任何时候操作GPU(即所有资源都保留给上下文,直到销毁上下文)。默认值为“共享模式”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接