首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们真的能通过CUDA streams获得性能提升吗?

我们真的能通过CUDA streams获得性能提升吗?
EN

Stack Overflow用户
提问于 2011-11-27 17:44:59
回答 2查看 645关注 0票数 2

理论上,当我们在CUDA中使用streams时,我们应该会获得性能提升。我实现了高斯-赛德尔方法,令人惊讶的是,使用streams所需的时间比没有使用streams.Does时要长得多。谁有我可以看到性能提升的例子(除了SDK的sample目录中给出的例子没有那么有用)。

EN

回答 2

Stack Overflow用户

发布于 2011-11-29 22:17:28

CUDA streams使PCI Express传输能够与内核处理同时执行。根据Amdahl定律,只有执行等量数据传输和内核处理的工作负载才能从CUDA流中受益。要确定您的工作负载是否会受益,可以对您的应用程序进行分析或添加一些计时代码,以查看理论上的最大性能收益。

请注意,为了从CUDA流中获得性能改进,您必须“软件管道”下载、内核启动和上传。执行以下操作:

代码语言:javascript
复制
foreach stream {
    cudaMemcpyAsync( device[stream], host[stream], ... stream );
}
foreach stream {
    LaunchKernel<<<...stream>>>( ... );
    // you can launch multiple kernels in stream, if desired.
}
foreach stream {
    cudaMemcpyAsync( host[stream], device[stream], ... stream );
}

不是这样的:

代码语言:javascript
复制
foreach stream {
    cudaMemcpyAsync( device[stream], host[stream], ... stream );
    LaunchKernel<<<...stream>>>( ... );
    cudaMemcpyAsync( host[stream], device[stream], ... stream );
}
票数 2
EN

Stack Overflow用户

发布于 2011-11-30 17:59:04

是的,在计算时间很长并且所有数据都不是相互依赖的问题中。然后,您可以将昂贵的计算时间隐藏在已经很昂贵的内存传输中。

请注意,CUDA可以同时执行内存复制和内核执行,因此当一个流执行内存复制时,另一个流可以执行计算。

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

https://stackoverflow.com/questions/8284680

复制
相关文章

相似问题

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