自 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+ 上“有效”(不挂起)。
自 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
Here is another example 算法仅在 pre-volta 上挂起,但在 volta+ 上“有效”(不挂起)。