5.7. 什么是利特尔法则?

利特尔法则(Little’s Law)确定了通过吞吐量完全 隐藏延迟 (hide latency) 所需的并发量。

并发量 (操作数) = 延迟 () * 吞吐量 (操作数/)

Lazowska等人所著的经典定量系统教科书 中,利特尔法则描述为分析领域 “最重要的基本定律” 之一。

利特尔法则决定了 GPU 需要有多少指令处于 “执行中” 状态,才能通过 线程束调度器 (warp schedulers) 进行 线程束 (warp) 切换(也称为细粒度线程级并行,类似于 CPU 中的 同步多线程)来 隐藏延迟 (hide latency)

如果某个 GPU 的峰值吞吐量为每周期 1 条指令,内存访问延迟为 400 个周期,那么程序中所有 活跃线程束 (active warps) 需要 400 个并发内存操作。如果吞吐量增加到每周期 10 条指令,那么程序需要 4000 个并发内存操作才能充分利用这种增长。更多细节请参阅关于 延迟隐藏 (latency hiding) 的文章。

对于利特尔法则的一个重要应用,请考虑 Vasily Volkov博士论文 第4.3节中关于 延迟隐藏 (latency hiding) 的观察结果:隐藏纯内存访问延迟所需的线程束数量并不比隐藏纯算术延迟所需的线程束数量多太多(在他的实验中是30 vs 24)。直观上看,内存访问的较长延迟似乎需要更多的并发。但并发量不仅由延迟决定,还受吞吐量影响。由于 内存带宽 (memory bandwidth) 远低于 算术带宽 (arithmetic bandwidth),所需的并发量结果大致相同——这对于面向 延迟隐藏 (latency hiding) 且需要混合算术和内存操作的系统而言,是一种有用的平衡形式。