我需要一些关于我将要承担的项目的建议。我计划使用CUDA 4.0在一个使用CUDA 4.0的多GPU节点上运行简单的内核(尚未决定,但我使用的是令人尴尬的并行内核),方法如下所示。其目的是通过在多GPU环境下启动CUDA提供的不同策略的内核来描述节点。
单个主机线程-多个设备(共享context)
)
我漏掉了什么类别吗?欢迎您对我所选择的测试类别和任何一般性建议w.r.t多GPU编程有什么看法。
谢谢,
萨扬
编辑:
我认为以前的分类涉及到一些冗余,所以对其进行了修改。
发布于 2011-07-29 14:36:46
大多数工作负载在CPU工作上都足够轻,您可以从一个线程中处理多个GPU,但从CUDA 4.0开始,这就变得很容易了。在CUDA4.0之前,您可以调用cuCtxPopCurrent()/cuCtxPushCurrent()来更改当前到给定线程的上下文。但是从CUDA4.0开始,您只需调用cudaSetDevice()来设置与给定设备对应的当前上下文。
但是,您的选项1)用词不当,因为不存在“共享上下文”-- GPU上下文仍然是独立的,设备内存和对象(如CUDA流和CUDA事件)与创建它们的GPU上下文相关联。
发布于 2011-07-03 01:36:28
多主机线程-等于多个设备,独立的上下文是一个赢家,如果你可以逃脱它。这是假设你可以得到真正独立的工作单位。这应该是正确的,因为你的问题是令人尴尬的平行。
注意:我个人还没有建立一个大规模的多GPU系统.我已经建立了一个成功的单GPU系统w/ 3个数量级的加速度相对于CPU。因此,建议是对我所见过的同步成本的概括,以及与构建了多GPU系统的同事的讨论。
https://stackoverflow.com/questions/6551326
复制相似问题