Gene Amdahl, 计算领域的早期先锋之一, 对提升系统的某一部分性能所带来的效果做出了简单却有见地的观察,这个观察被称为Amdahl定律(Amdahl’s law, 阿姆达尔定律).
定律的主要思想是__当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度__.
若系统执行某应用程序需要的时间为 T old T_{\text {old }} Told .假设系统的某部分所需的执行时间与该随时间的比例为 α \alpha α,而该部分系统性能提升比例为 k k k.即该部分初始所需时间为 α T o l d \alpha T_{\mathrm{old}} αTold,现在所需时间为 ( α T o l d ) / k \left(\alpha T_{\mathrm{old}}\right) / k (αTold)/k.因此,总的执行时间为:
T new = ( 1 − α ) T old + ( α T old ) / k = T old [ ( 1 − α ) + α / k ] , T_{\text {new }}=(1-\alpha) T_{\text {old }}+\left(\alpha T_{\text {old }}\right) / k=T_{\text {old }}[(1-\alpha)+\alpha / k], Tnew =(1−α)Told +(αTold )/k=Told [(1−α)+α/k],
由此,计算加速比 S = T o l d / T n e w S=T_{\mathrm{old}} / T_{\mathrm{new}} S=Told/Tnew为:
S = 1 ( 1 − α ) + α / k . S=\frac{1}{(1-\alpha)+\alpha / k}. S=(1−α)+α/k1.
举例,考虑这样一种情况,系统的某个部分初始耗时为 60 % ( α = 0.6 ) 60 \%(\alpha=0.6) 60%(α=0.6),其加速比例因子为 3 ( k = 3 ) 3(k=3) 3(k=3)。则我们获得的加速比为 1 / [ 0.4 + 0.6 / 3 ] = 1.67 1 /[0.4+0.6 / 3]=1.67 1/[0.4+0.6/3]=1.67倍.虽然我们对系统的一个主要部分进行了重大改进,但是获得的系统加速比却明显小于这部分的加速比.
通过上面的例子,也可以看出Amdahl定律的主要观点——要想加速整个系统,必须提升全系统中相当大部分的速度.
现在,我们考虑Amdahl定律的一个有趣的特殊情况: k k k趋向于 ∞ \infty ∞时的效果.这意味着我们可以取系统的某一个部分将其加速到一个点,在这个点上,这部分花费的时间可以忽略不计,于是得到
S ∞ = 1 ( 1 − α ) . S_{\infty}=\frac{1}{(1-\alpha)}. S∞=(1−α)1.
举例来说,如果 60 % 60 \% 60%的系统能够加速到不花时间的程度,我们获取的净加速比将仍只有 1 / 0.4 = 2.5 × . 1 / 0.4=2.5 \times. 1/0.4=2.5×.
Amdahl定律描述了改善任何过程的一般原则,除了可以用在加速计算机系统方面之外,它还可以用在公司试图降低制造成本。也许它在计算机世界里是最有意义的,这里我们通常把性能提升 2 2 2倍或者更高的比列因子。这么高的比列因子只有通过优化系统的大部分组件才能获取.