cuda - 多个进程并行启动 CUDA 内核

标签 cuda gpu

我知 Prop 有 2.x 或更高计算能力的 NVIDIA GPU 可以同时执行多达 16 个内核。
但是,我的应用程序生成了 7 个“进程”,并且这 7 个进程中的每一个都启动了 CUDA 内核。

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

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

“来自一个 CUDA 上下文的内核不能与来自另一个 CUDA 上下文的内核同时执行。”
这让我想到我的第二个问题,什么是 CUDA“上下文”?

谢谢!

最佳答案

CUDA 上下文是一个虚拟执行空间,其中包含主机线程或进程拥有的代码和数据。具有所有当前硬件的 GPU 上只能激活一个上下文。

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

您最好启动一个持有 GPU 上下文的工作线程,并使用来自其他线程的消息将工作推送到 GPU。或者,在 CUDA 驱动程序 API 中有一个上下文迁移工具可用,但这仅适用于来自同一进程的线程,并且迁移机制具有延迟和主机 CPU 开销。

关于cuda - 多个进程并行启动 CUDA 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14895034/

相关文章:

cuda - 目前在 F# 上使用 CUDA 的最佳免费选项是什么

performance - 不同GPU内存空间的访问时间是多少?

ubuntu - 用cuda的时候用desktop或者gui界面可以吗?

visual-studio-2010 - 如何使用并行 nsight 在 Visual Studio 2010 中调试 cuda 推力功能

c - CUDA 内核操作中 Atomic 添加的一些问题

c++ - nsight eclipse 中的 CUFFT_ALLOC_FAILED 错误

macos - 我可以从 MacBook Pro 上的 docker 容器中使用我的 GPU 吗? (AMD Radeon GPU)

c++ - Sycl 内核调用非常慢

c++ - 使用Cuda进行并行尺寸缩减(3D到2D求和)

cuda - CUDA 中更好或相同的 : CPU memcpy() vs device cudaMemcpy() on pinned, 映射内存?