我们在进行系统优化完成后,怎么评估优化的效果呢?最简单的方式是测量系统优化后耗时和优化前耗时的比例,这也叫加速比S(Speed Up)。
阿姆达尔定律在理解性能优化具有重要指导意义。优化前系统总耗时To(old),优化后系统总耗时Tn(new),加速比S=To/Tn。
通过下面这张图理解:(α为待提速部分原来耗时比例)
理解性能提升By阿姆达尔定律(Amdahl's law)

S = To/Tn = 1 / (1-α)+α/k
当待优化部分提速无穷倍(k接近无穷大,不耗时间)时候,S = 1 / (1-α) , 也就是说,比如α=60%,如果系统中60%的部分能提速到不花时间,那么获得最高的加速比仍然只有1/0.4=2.5,系统才能提速2.5倍。也就是Amdahl's law的主要观点:要想显著加速整个系统,必须提升全系统大部分的速度。


我们在刻画并行程序的时候,理想情况是随着cpu核数增加,期望运行时间会线性下降。也就是说,期望线程数加一倍,运行时间就会减一半。
如图:
实际情况:
理解性能提升By阿姆达尔定律(Amdahl's law)

理想情况:
理解性能提升By阿姆达尔定律(Amdahl's law)

关键刻画性能提升的指标是加速比,旧时间/新时间,随着线程增加,时间对应减少,实际情况,随着线程增加,运行时间可能会增加,因为有了线程上下文切换的开销。

参考:
阿姆达尔定律: https://en.wikipedia.org/wiki/Amdahl%27s_law
加速比: https://en.wikipedia.org/wiki/Speedup