首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA,如何选择<<<Blocks,Threads<>>?

CUDA,如何选择<<<Blocks,Threads<>>?
EN

Stack Overflow用户
提问于 2012-09-30 17:06:51
回答 3查看 1.6K关注 0票数 9

在库中,我使用对几个CUDA内核的调用。我当然想得到最好的性能。用户使用该库的方式可能会有所不同。

块/线程的数量对此影响很大。

关于如何选择块/线程以获得最佳性能,有什么规则吗?

例如(只是一个问题),是不是最好选择块高,线程低?或者反过来呢?或者最好使用GetDeviceProperties()中的一些值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-30 18:56:39

您可以使用NVIDIA提供的dependency calculator.xls来选择最佳配置,您必须尝试更改xls中线程和块的值以获得最佳配置,在此配置下,您可以获得最佳占用,这反过来会给您带来最佳性能。

票数 0
EN

Stack Overflow用户

发布于 2012-09-30 17:15:28

最好是在一个块中至少有一个完整的线程,否则只会使可用的处理能力得到很低的利用。此外,您通常希望有一个可由一个块中的线程数的翘曲大小均匀整除。

在一个块中使用的线程总数取决于您的资源使用情况。原则上,你想要的是一个大的占有率。这些限制由可用的共享内存和寄存器设置。如果您使用大量的共享内存和/或寄存器,则最大可达到的占用率会下降。然后,有必要分析和微调每个块的线程数量,直到找到一个最佳点,在这个点上,实现的占用率和理论占用率达到最大,当然,总占用率本身也尽可能接近100%。

根据经验,您希望最大化每个块的线程数量,同时保持良好的占用率。在分析步骤中,自动迭代一组可能的块/线程数组合以找到最极端的组合是完全有意义的。

票数 0
EN

Stack Overflow用户

发布于 2013-08-27 12:50:59

我觉得这完全是经验。

块和网格的大小取决于很多因素,如算法、每个线程的工作、资源、延迟。

在正常情况下,我将首先设置为256*256。并经常调整它以选择一个更好的。

在推力方面,他们将选择257这样的块大小,以避免银行冲突。

有很多资源可以帮助你选择。如:延迟和数据块大小(http://www.lsr.nectec.or.th/images/e/e6/Cuda_Optimization2.pdf)

无论如何,只要尝试并更新它即可。

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

https://stackoverflow.com/questions/12660060

复制
相关文章

相似问题

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