阿姆达尔定律的准确性如何?

How accurate is amdahl's law?

In computer architecture, Amdahl's law gives the theoretical speedup in latency of the execution of a task at fixed workload that can be expected of a system whose resources are improved.

Slatency是整个任务执行延迟的理论加速;

s是受益于系统资源改善的部分任务执行延迟的加速;

p是整个任务执行时间中受益于改善前系统资源改善部分的百分比。

Slatency = 1/[(1-p) + (p/s)]

这都是理论上的,让我思考,什么时候不适用。估计 CPU 性能的准确性如何?

通常当您想要调整程序的某些部分时,您会制作一个微基准测试来单独测试它。

这并不总是反映当 运行 作为完整程序的一部分时它将如何表现。 (即在您正在调整的部分的执行之间进行其他工作,而不是在一个紧密的循环中。)

例如如果您发现 sin(x) 计算开销很大,并将它们替换为查找 table,这可能会在微基准测试中胜出,因为足够小的 table 在连续调用时会在缓存中保持热中间没有其他工作。类似地,微基准测试在分支预测启动且没有代码缓存压力(这可以使循环展开看起来比实际情况更好)的情况下测量性能。

但这只是意味着您对 s 的估计对于作为整个程序一部分的函数是错误的,并不是说阿姆达尔定律不准确。那只是用错了而已。


但是,这确实为您的问题提供了真正的答案:

以某种方式加速程序的一部分,导致程序的 其他 部分出现更多缓存或 TLB 未命中、分支预测错误等确实违反了阿姆达尔定律。