阿姆达尔定律的准确性如何?
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 未命中、分支预测错误等确实违反了阿姆达尔定律。
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 未命中、分支预测错误等确实违反了阿姆达尔定律。