自 Volta 以来的独立线程调度

Independent Thread Scheduling since Volta

自 Volta 以来,Nvidia 为其 GPGPU 引入了新的独立线程调度。如果 CUDA 线程发生分歧,替代代码路径不会按块执行,而是按指令执行。尽管如此,不同的路径不能同时执行,因为 GPU 也是 SIMT。本文为原文:

https://developer.nvidia.com/blog/inside-volta/(向下滚动到“独立线程调度”)。

我明白这是什么意思了。我不明白的是,这种新行为以何种方式加速代码。即使是上述文章中的 before/after 图表也没有反映整体加速。

我的问题:由于所描述的新调度,哪种发散算法在 Volta(和更新的)上会 运行 更快?

该功能的目的不一定是加速代码。

该功能的一个重要目的是能够可靠地使用编程模型,例如 producer-consumer 在 warp 中(在同一 warp 中的线程之间),如果使用以前的线程调度程序 pre-volta.

IMO 的典型示例,您可以在 cuda 标签上找到各种示例,人们试图在同一个 warp 中的线程之间协商原子锁。这在以前的架构上会是 "brittle" (and ) or (挂起)。根据我的经验,它在 volta 上运行良好。

Here is another example 算法仅在 pre-volta 上挂起,但在 volta+ 上“有效”(不挂起)。