使用CUDA的多GPU编程策略

Say*_*yan 7 cuda

我需要就我将要进行的项目提出一些建议.我计划通过遵循下面列出的策略,在使用CUDA 4.0的Multi-GPU节点上运行简单的内核(尚未决定,但我正在以令人难以置信的平行方式).目的是通过在多GPU环境中以CUDA提供的不同策略启动内核来分析节点.

  1. 单主机线程 - 多个设备(共享上下文)
  2. 单主机线程 - 在单个设备上并发执行内核(共享上下文)
  3. 多个主机线程 - (等于)多个设备(独立上下文)
  4. 单主机线程 - 在一个设备上执行顺序内核
  5. 多个主机线程 - 在一个设备上并发执行内核(独立上下文)
  6. 多个主机线程 - 在一个设备上顺序执行内核(独立上下文)

我错过了任何类别吗?您对我选择的测试类别有什么看法,欢迎使用多GPU编程的任何一般建议.

谢谢,
萨彦

编辑:

我认为以前的分类涉及一些冗余,所以修改它.

Arc*_*are 2

大多数工作负载的 CPU 工作量都足够轻,您可以通过单个线程处理多个 GPU,但这从 CUDA 4.0 开始才变得容易。在 CUDA 4.0 之前,您可以调用cuCtxPopCurrent()/cuCtxPushCurrent()来更改给定线程的当前上下文。但从 CUDA 4.0 开始,您只需调用cudaSetDevice()即可设置当前上下文以对应于给定设备。

不过,您的选项 1) 是用词不当,因为不存在“共享上下文”——GPU 上下文仍然是独立的,设备内存和对象(例如 CUDA 流和 CUDA 事件)与创建它们的 GPU 上下文相关联。