如果有四个并发的CUDA应用程序在一个GPU中竞争资源,以便将工作卸载到图形卡上,会发生什么情况?Cuda编程指南3.1提到有些方法是异步的:
launches
F 211的函数执行
它还提到,具有计算能力2.0的设备能够同时执行多个内核,只要内核属于同一个上下文。
这种类型的并发是否仅适用于单个cuda应用程序中的流,但当有完全不同的应用程序请求GPU资源时就不可能了?
这是否意味着并发支持只在一个应用程序中可用(上下文??)而这4个应用程序只是以这样的方式并行运行:方法可能被CPU中的上下文切换所重叠,但这4个应用程序需要等到GPU被其他应用程序释放后再运行?(即从app4启动内核,直到app1内核启动完成。)
如果是这样的话,这4个应用程序如何才能访问GPU资源而不经历漫长的等待时间呢?
发布于 2010-09-14 14:54:04
正如您所说,在任何给定的时间,只有一个“上下文”可以占用每个引擎。这意味着一个复制引擎可以为应用程序A提供一个memcpy,另一个用于应用程序B,计算引擎可以为应用程序C执行一个内核(例如)。
一个应用程序实际上可以有多个上下文,但是没有两个应用程序可以共享相同的上下文(尽管应用程序中的线程可以共享一个上下文)。
任何安排在GPU上运行的工作的应用程序(例如,memcpy或内核启动)都可以异步安排工作,这样应用程序就可以自由地在CPU上执行其他一些工作,并且可以安排在GPU上运行的任意数量的任务。
请注意,还可以将GPU置于独占模式中,即在任何时候只有一个上下文可以在GPU上操作(也就是说,在上下文被销毁之前,所有资源都保留给上下文)。默认情况是共享模式。
https://stackoverflow.com/questions/3709526
复制相似问题