首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CUDA的多GPU编程策略

使用CUDA的多GPU编程策略
EN

Stack Overflow用户
提问于 2011-07-01 17:35:34
回答 2查看 2.7K关注 0票数 7

我需要一些关于我将要承担的项目的建议。我计划使用CUDA 4.0在一个使用CUDA 4.0的多GPU节点上运行简单的内核(尚未决定,但我使用的是令人尴尬的并行内核),方法如下所示。其目的是通过在多GPU环境下启动CUDA提供的不同策略的内核来描述节点。

单个主机线程-多个设备(共享context)

  • Single主机线程-单个设备上内核的并发执行(共享context)

  • Multiple主机线程-(相等)多设备)(独立contexts)

  • Single主机线程-在一个设备上的顺序内核执行

  • 多主机线程)-在一个设备上并发执行内核(独立contexts)

  • Multiple主机线程-在一个设备上连续执行内核(独立上下文)

)

我漏掉了什么类别吗?欢迎您对我所选择的测试类别和任何一般性建议w.r.t多GPU编程有什么看法。

谢谢,

萨扬

编辑:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-29 14:36:46

大多数工作负载在CPU工作上都足够轻,您可以从一个线程中处理多个GPU,但从CUDA 4.0开始,这就变得很容易了。在CUDA4.0之前,您可以调用cuCtxPopCurrent()/cuCtxPushCurrent()来更改当前到给定线程的上下文。但是从CUDA4.0开始,您只需调用cudaSetDevice()来设置与给定设备对应的当前上下文。

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-03 01:36:28

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

注意:我个人还没有建立一个大规模的多GPU系统.我已经建立了一个成功的单GPU系统w/ 3个数量级的加速度相对于CPU。因此,建议是对我所见过的同步成本的概括,以及与构建了多GPU系统的同事的讨论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6551326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档