使用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