使用CUDA的GPU编程策略

我需要一些关于我将要进行的项目的建议。 我正在计划使用CUDA 4.0在多GPU节点上运行简单的内核(尚未决定,但我在不情愿地并行执行),方法是遵循下面列出的策略。 其目的是通过启动CUDA在多GPU环境中提供的不同策略内核来剖析节点。

  • 单主机线程 - 多个设备(共享上下文)
  • 单主机线程 - 并行执行单个设备上的内核(共享上下文)
  • 多个主机线程 - (等于)多个设备(独立的上下文)
  • 单主机线程 - 在一个设备上执行顺序内核
  • 多个主机线程 - 并行执行一个设备上的内核(独立上下文)
  • 多个主机线程 - 在一个设备上顺序执行内核(独立的上下文)
  • 我错过了什么类别? 对于我选择的测试类别,您有什么看法,并欢迎任何有关多GPU编程的一般建议。

    谢谢,
    萨扬

    编辑:

    我认为以前的分类涉及一些冗余,因此对其进行了修改。


    大多数工作负载在CPU工作上都足够轻,您可以从单个线程处理多个GPU,但从CUDA 4.0开始,这只能轻松实现。 在CUDA 4.0之前,您可以调用cuCtxPopCurrent()/ cuCtxPushCurrent()来更改当前给定线程的上下文。 但从CUDA 4.0开始,您可以调用cudaSetDevice()来设置当前上下文以对应给定的设备。

    但是,您的选择1)是一个误称,因为没有“共享上下文” - GPU上下文仍然是独立的,设备内存和对象(如CUDA流和CUDA事件)与创建它们的GPU上下文相关联。


    多个主机线程 - 等于多个设备,独立的上下文是一个胜利者,如果你能摆脱它。 这是假设你可以得到真正独立的工作单位。 这应该是真实的,因为你的问题是尴尬的平行。

    警告:我没有亲自建立一个大规模的多GPU系统。 我已经建立了一个成功的单GPU系统,相对于CPU有3个数量级的加速。 因此,建议是我已经看到的同步成本的概括,以及与已经构建了多GPU系统的同事的讨论。

    链接地址: http://www.djcxy.com/p/8315.html

    上一篇: GPU programming strategies using CUDA

    下一篇: 3 finger swipe in Lion to change between .c and .h