【问题标题】:How to leverage blocks/grid and threads/block?如何利用块/网格和线程/块?
【发布时间】:2011-10-07 07:04:17
【问题描述】:

我正在尝试使用 CUDA 加速这个数据库搜索应用程序,并且我正在努力运行与 CUDA 并行的核心算法。

在一项测试中,我在一个大小为 5000 的数字序列中并行运行该算法,每个网格有 500 个块,每个块有 100 个线程,运行时间大约为 500 毫秒。

然后我将数字序列的大小增加到 8192,每个网格有 128 个块,每个块有 64 个线程,并且不知何故以 350 毫秒的结果返回运行算法。

这表明使用了多少块和线程以及它们之间的关系确实会影响性能。

我的问题是如何确定块/网格和线程/块的数量?

下面是来自标准设备查询程序的 GPU 规格:

【问题讨论】:

    标签: optimization parallel-processing cuda


    【解决方案1】:

    您应该对其进行测试,因为它取决于您的特定内核。您必须要做的一件事是使每个块的线程数成为扭曲中线程数的倍数。之后,您可以瞄准每个 SM 的高占用率,但这并不总是更高性能的代名词。结果表明,有时较低的占用率可以提供更好的性能。内存绑定内核通常从更高的占用率中受益更多,以隐藏内存延迟。计算绑定内核不是很多。测试各种配置是最好的选择。

    【讨论】:

    • 另外,尽量确保每个多处理器的工作量是平衡的——所以让你的线程块数大约是多处理器数的倍数。这对于较小的网格更为重要。对于非常大的网格,每个多处理器一个块的差异并不那么重要。
    • @seljuq70 fermi 架构在 fp32 操作上的正确比率是 4.5(ECC 关闭)和 3.6(ECC 开启)
    • 有人测试过,或者 NVIDIA 在某处说过,我错过了?很高兴知道任何一种方式。
    • @fabrizioM Tesla C1060 怎么样,我也在研究这个?另外,您是从哪里获得这些信息的?
    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2011-05-22
    • 2012-05-13
    相关资源
    最近更新 更多