【发布时间】:2021-08-15 01:35:14
【问题描述】:
根据 Volkov 的谈话Better Performance at Lower Occupancy,ILP 是隐藏延迟的重要方法,它增加了吞吐量。然而,同样从他的谈话来看,每个 SM 只有两个 warp 调度器,这意味着(如果我没有误解的话)SM 可以在一个线程中发出两条独立的指令。那为什么ILP > 2,吞吐量也可以增加(根据Volkov的谈话p15-p20中的实验)?
【问题讨论】:
-
这个问题似乎过于笼统。是的,ILP 在一定程度上有所帮助,并且在较新的 GPU 架构(大致是 Pascal 和更高的架构)中利用 ILP 的机会更多。
-
ILP 在 SM 执行期间也被流水线使用。 ILP 代码还可以在编译期间更好地重新排序,以减少指令依赖性。当指令等待完成时,我不认为调度程序被阻塞。它们可以在下一个循环中发出相同warp的独立指令。
-
那么使用 k 个 warp 调度器,我们能否仅使用 ILP(连续使用超过 k 个独立指令)达到 k 倍以上的吞吐量?
-
有些 warp 调度器是双重问题,有些不是。对您的问题的准确回答需要指定哪个。对于 k 个单一问题的 warp 调度程序,在特定时钟周期内不可能发出超过 k 个指令。对于 k 个双发布 warp 调度程序(例如,开普勒),可以在特定时钟周期内发布多于 k 个指令。请注意,warp 调度程序已分配 warp。这意味着两个独立的 warp 调度程序不能在特定的时钟周期(或者对于最近的 GPU)发出与同一个 warp 相关的指令。
-
在特定指令流中的指令(与 ILP 相关)之间的 独立性 属性是一个普遍有用的属性。如前所述,编译器可以识别独立性并将其用于reorder instructions,这可以提高性能。这不一定与问题特征有关。
标签: cuda