首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据自动化系统中,使用多个流什么时候能获得好处?

在数据自动化系统中,使用多个流什么时候能获得好处?
EN

Stack Overflow用户
提问于 2014-06-30 13:16:06
回答 2查看 510关注 0票数 0

我已经写了一个CUDA程序,它已经得到了一个加速与40的串行版本(2600 K比GTX 780)。现在,我正在考虑使用几个流来运行几个内核并行。现在我的问题是:我如何衡量我的GPU上的免费资源(因为如果我在GPU上没有免费资源,那么流的使用就没有意义了,对吗?),在这种情况下,流的使用是有意义的吗?

如果被问到的话,我当然可以提供我的代码,但现在我觉得没有必要问这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-30 14:09:10

并发运行内核只有在资源可用的情况下才会发生。一个“耗尽”GPU的单个内核调用将阻止其他内核以有意义的方式执行,正如您已经指出的那样,直到该内核完成执行为止。

最初需要考虑的关键资源是SMs、寄存器、共享内存和线程。其中大多数都与占用有关,因此,研究现有内核的占用率(理论上的,即占用计算器,以及度量的),将为您提供一个通过并发内核获得额外收益的良好的总体视图。

在我看来,并发内核只有在启动大量非常小的内核(即只包含一个或少数线程块并使用共享内存、寄存器和其他资源的内核)时,才可能在应用程序中显示出很大的总体好处。

最好的优化方法(在我看来)是分析驱动的优化。这样可以避免过早或可能误导的优化策略,例如“我听说过并发内核,我想知道我的代码是否可以更快地运行吗?”分析驱动优化首先询问基本的利用率问题,使用分析器回答这些问题,然后将优化工作集中于改进度量,例如内存利用率或计算利用率。并发内核或各种其他技术是您可能使用的一些策略,用于分析代码的分析结果。

您可以开始使用这一个之类的演示文稿进行分析驱动的优化。

票数 3
EN

Stack Overflow用户

发布于 2014-06-30 14:08:50

如果没有指定流,则使用流0。根据维基百科 (您也可以在cudaDeviceProp结构中找到它),您的GTX780 GPU有12个流式多处理器,这意味着如果您使用多个流,可能会有改进。asyncEngineCount属性将告诉您可以运行多少并发异步内存副本。

使用流的思想是使用异步复制引擎(也称为DMA引擎)来重叠内核执行和device2host传输。要获得最佳性能应该使用的流数量很难猜测,因为它取决于您拥有的DMA引擎的数量、SMs的数量以及同步/并发量之间的平衡。为了得到一个想法,你可以阅读这份报告 (例如幻灯片5,6,很好地解释这个想法)。

编辑:我同意需要使用分析器作为第一步。

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

https://stackoverflow.com/questions/24491019

复制
相关文章

相似问题

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