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

Bar*_*lla 6 c parallel-processing cuda gpgpu nvidia

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

  • 内核启动
  • 设备设备内存副本
  • 64 KB或更小内存块的主机设备内存副本
  • 内存副本由以Async为后缀的函数执行
  • 内存设置函数调用

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

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

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

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

Tom*_*Tom 4

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

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

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

请注意,还可以将 GPU 置于独占模式,从而在任何时间只有一个上下文可以在 GPU 上运行(即,所有资源都为该上下文保留,直到该上下文被销毁)。默认为共享模式