关于阿姆达定律(Amdahl’ low)的一些故事
阿姆达尔定律是一个计算机科学界的经验法则,因IBM公司计算机架构师Gene Amdahl而得名。Gene Amdahl在1967年发表的论文中提出了这个重要定律。
参考书籍:书籍《深入理解Java虚拟机》第3版第438页
Gene Amdahl进行了一个富有洞察力的观察: 提升一个系统的一个部分的性能对整个系统有多大影响。这一观察被称为Amdahl’s Law(阿姆达尔定律):
英文公式为: speed up = exe time old/exe time new
(注:这里的系统,可指计算机系统或别的什么系统)
Amdahl的系统改造加速比被定义成:
系统加速比 = 使用增强措施时完成整个任务的性能 / 原完成整个任务的性能
当提升系统的一部分性能时,对整个系统性能的影响取决于:1、这一部分有多重要 2、这一部分性能提升了多少。
假设原来在一个系统中执行一个程序需要时间为 T o l d T_{old} Told,其中某一个部分占的时间百分比为 a a a,然后,把这一部分的性能提升 K K K倍。即这一部分原来需要的时间为 a T o l d aT_{old} aTold ,现在需要的时间变为 ( a T o l d ) / K (aT_{old})/K (aTold)/K。则整个系统执行此程序需要的时间变为:
T
n
e
w
=
(
1
−
a
)
T
o
l
d
+
(
a
T
o
l
d
)
/
K
=
T
o
l
d
[
(
1
−
a
)
+
a
/
K
]
T_{new}=(1-a)T_{old}+(aT_{old})/K=T_{old}[(1-a)+a/K]
Tnew=(1−a)Told+(aTold)/K=Told[(1−a)+a/K]
因此,系统性能提速的倍数为:
S
=
1
(
1
−
a
)
+
a
/
K
S=\frac{1}{(1-a)+a/K}
S=(1−a)+a/K1 。
示例:
某个系统的某个部分的执行时间占总执行时间的70%,即 a = 0.7 a=0.7 a=0.7,这部分性能提升4倍( K = 4 K=4 K=4),则整个系统的性能提升为 1 / [ 0.3 + 0.7 / 4 ] = 2.11 1/[0.3+0.7/4]=2.11 1/[0.3+0.7/4]=2.11倍。
可以看出即使一个系统的主要部分性能提升了很多,整个系统的性能提升远远小于此部分的提升。
(我们可以把上面的例子极端化一下,即把那部分性能的提升从4倍改为到无穷大倍,即 K = ∞ K=∞ K=∞,这部分能瞬间就能执行完,则 S ∞ = 1 ( 1 − a ) = 1 ( 1 − 0.7 ) = 3.33 S_∞=\frac{1}{(1-a)}=\frac{1}{(1-0.7)}=3.33 S∞=(1−a)1=(1−0.7)1=3.33倍,可见实际效果远小于 ∞ ∞ ∞ )