首页 文章

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

提问于
浏览
6

如果有四个并发的CUDA应用程序在一个GPU中竞争资源,那么他们可以将工作卸载到图形卡上会发生什么? Cuda编程指南3.1提到某些方法是异步的:

  • 内核启动

  • 设备设备内存副本

  • 64 KB或更少内存块的主机设备内存副本

  • 由Async后缀的函数执行的内存复制

  • 内存设置函数调用

同时它提到具有计算能力2.0的设备能够同时执行多个内核,只要内核属于同一个上下文 .

这种类型的并发只适用于单个cuda应用程序中的 streams ,但是当有完整的不同应用程序请求GPU资源时,这种情况不可能吗?

这是否意味着并发支持只能在1个应用程序(context ???)中使用,并且4个应用程序将以方式可能由CPU中的上下文切换重叠的方式运行并发,但4个应用程序需要等待直到GPU被其他应用程序释放? (即从app4启动内核等待,直到从app1启动内核结束..)

如果是这种情况,这四个应用程序如何在不长时间等待的情况下访问GPU资源?

1 回答

  • 4

    正如您所说,在任何给定时间只有一个“上下文”可以占用每个引擎 . 这意味着其中一个复制引擎可以为应用程序A提供memcpy,另一个为应用程序B提供memcpy,而计算引擎可以为应用程序C执行内核(例如) .

    应用程序实际上可以有多个上下文,但没有两个应用程序可以共享相同的上下文(尽管应用程序中的线程可以共享上下文) .

    任何调度工作在GPU上运行的应用程序(即memcpy或内核启动)都可以异步调度工作,以便应用程序可以继续执行并在CPU上执行其他任务,并且可以安排任意数量的任务在GPU上运行 .

    请注意,还可以将GPU放在 exclusive mode 中,从而在任何时候只有一个上下文可以在GPU上运行(即,在上下文被破坏之前,所有资源都保留用于上下文) . 默认值为 shared mode .

相关问题