6

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

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

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

这种类型的并发是否仅适用于单个 cuda 应用程序中的,但在有完全不同的应用程序请求 GPU 资源时是不可能的?

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

如果是这样,这 4 个应用程序如何访问 GPU 资源而不需要长时间等待?

4

1 回答 1

4

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

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

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

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

于 2010-09-14T14:54:04.393 回答