《深入理解计算机系统》之阿姆达尔定律

402 阅读2分钟

Amdahl定律(Amdahl's law, 阿姆达尔定律)

  该定律的主要思想是,当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。若系统执行某应用程序需要时间为ToldT_{old}。假设系统某部分所需执行时间与该时间的比例为aa,而该部分性能提升比例为kk。即该部分初始所需时间为aToldaT_{old},现在所需时间为(aTold)/kaT_{old})/k。因此,总的执行时间应为

                    Tnew=(1a)Told+(aTold)/k=Told[(1a)+a/k]                     T_{new} = (1 - a)T_{old} + (aT_{old})/k = T_{old}[(1-a)+a/k]

  由此,可以计算加速比S=Told/TnewS=T_{old}/T_{new}

             S=1(1a)+a/k              S = \dfrac{1} {(1-a)+a/k}

  举个列子,小王从武汉开车去某南方城市,全程2500公里,小王计划以时速100km/h前行,当行驶了10小时后,小王发现剩下1500公里路程高速不限速,小王准备以时速150km/h跑完剩余里程。求小王行驶的加速比?      

  通过上面的公式我们就很容易算出来了S=2500/10010+1500/150=25(Told)20(Tnew)=1.25S = \dfrac{2500/100}{10+1500/150} = \dfrac{25(T_{old})}{20(T_{new})}= 1.25

  Amdahl定律有一个有趣的特殊情况是考虑kk趋向于∞时的效果。这就意味着,我们可以取系统的某一部分将其加速到一个点,在这个点上,这部分发费的时间可以忽略不计。
于是我们得到

               S=11aS_∞=\dfrac{1}{1-a}

  举个例子,如果60%的系统能够加速到不花时间的程度,我们获得的净加速比将仍只有1/0.4=2.51/0.4=2.5

  由此我联想到,如果系统能够加速到不花时间的部分接近100%呢,那就是分子(1a)(1-a)趋向于无穷小但是大于0,那加速比SS将趋向于无穷大,这里有两个关键的条件:

  1. 提升的程度要足够大
  2. 提升的占比要足够大   同样应用到我们的生活中,如果我们想要提升自己的能力,我们不但要提升单方面的能力,而更重要是要提升整体的综合能力,以及能力提升的高度。举个例子,英语综合能力,听说读写,如果我们只是特别善于听力,说读写都来不了,当老外跟你沟通的时候,虽然你能听懂,但是却不会表达,只能在那里手足舞蹈一番,弄的老外一脸懵比。所以,我们只有提高英语听说读写的综合能力,当我们的综合能力提高到接近native speaker时,我们的SS就是趋向于∞了。