【问题标题】:Why launch a multiple of 32 number of threads in CUDA?为什么在 CUDA 中启动 32 个线程的倍数?
【发布时间】:2014-12-24 00:42:17
【问题描述】:

我参加了 CUDA 并行编程课程,并且看到了许多 CUDA 线程配置示例,其中通常将所需的线程数四舍五入到最接近的 32 倍数。我知道线程被分组为 warp,并且如果你启动 1000 个线程,GPU 无论如何都会将它四舍五入到 1024,那么为什么要明确这样做呢?

【问题讨论】:

    标签: parallel-processing cuda


    【解决方案1】:

    建议通常是在您可能会选择各种线程块大小来解决相同问题的情况下给出的。

    我们以向量相加为例。假设我的向量长度为​​ 100000。我可能会选择启动 100 个块,每个块包含 1000 个线程。在这种情况下,每个块将有 1000 个活动线程和 24 个非活动线程。我的线程资源平均利用率是 1000/1024 = 97.6%。

    现在,如果我选择大小为 1024 的块怎么办?现在我只需要启动 98 个块。这些块中的前 97 个块在线程利用率方面得到了充分利用——每个线程都在做一些有用的事情。第 98 个块只有 672 个(共 1024 个)线程在做一些有用的事情。由于线程检查 (if (idx < N)) 或内核代码中的其他构造,其他显式处于非活动状态。所以我在那个块中有 352 个非活动线程。但我的总体平均利用率是 100000/100352 = 99.6%

    所以在上述场景中,最好选择“完整”线程块,可以被 32 整除。

    如果您正在对长度为 1000 的向量进行向量添加,并且您打算在单个线程块中执行此操作(两者都可能是坏主意),那么您选择 1000 还是 1024 作为线程块大小都没有关系.

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 1970-01-01
      • 2014-05-20
      • 2013-04-21
      • 2012-08-08
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多