多个进程并行启动CUDA内核

use*_*543 13 cuda gpu

我知道具有2.x或更高计算能力的NVIDIA gpus可以同时执行16个内核.但是,我的应用程序产生7个"进程",这7个进程中的每个进程都会启动CUDA内核.

我的第一个问题是这些内核的预期行为是什么.它们是否会同时执行,或者由于它们由不同的进程启动,它们将按顺序执行.

我很困惑,因为CUDA C编程指南说:

"来自一个CUDA上下文的内核无法与来自另一个CUDA上下文的内核同时执行." 这让我想到了第二个问题,什么是CUDA"背景"?

谢谢!

tal*_*ies 19

CUDA上下文是一个虚拟执行空间,用于保存主机线程或进程拥有的代码和数据.使用所有当前硬件的GPU上只能有一个上下文处于活动状态.

因此,要回答您的第一个问题,如果您有七个单独的线程或进程都尝试建立上下文并同时在同一GPU上运行,它们将被序列化,等待访问GPU的任何进程将被阻止,直到所有者运行上下文收益率 据我所知,没有时间切片和调度启发式没有记录,并且(我怀疑)从操作系统到操作系统并不统一.

您最好启动一个包含GPU上下文的工作线程,并使用来自其他线程的消息传递将工作推送到GPU上.或者,CUDA驱动程序API中提供了一个上下文迁移工具,但它只适用于来自同一进程的线程,并且迁移机制具有延迟和主机CPU开销.