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

如果有四个并发CUDA应用程序争夺一个GPU中的资源,那么会发生什么情况?因此他们可以将工作卸载到显卡? Cuda编程指南3.1提到了某些异步的方法:

  • 内核启动
  • 设备设备内存拷贝
  • 主机设备内存复制64 KB或更少的内存块
  • 内存副本由后缀Async的函数执行
  • 内存设置函数调用
  • 它还提到具有计算能力2.0的设备能够同时执行多个内核,只要内核属于相同的上下文。

    这种并发性是否适用于单个cuda应用程序中的 ,但在完全不同的应用程序请求GPU资源时无法实现?

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

    如果是这样,那么这4个应用程序如何可以访问GPU资源而不会遭受漫长的等待时间?


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

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

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

    请注意,也可以将GPU置于独占模式 ,从而随时只能在GPU上运行一个上下文(即,在上下文被销毁之前,所有资源都保留用于上下文)。 默认是共享模式

    链接地址: http://www.djcxy.com/p/47409.html

    上一篇: Concurrency, 4 CUDA Applications competing to get GPU resources

    下一篇: Provisioning Profiles menu item missing from Xcode 5