线程的概念(二)---两个重要定律

1、Amdahl定律

  Amdahl定律是计算机科学中非常重要的定律。它定义了串行系统并行化后的加速比的计算公式和理论上限。

  加速比定义:

    加速比 = 优化前系统耗时 / 优化后系统耗时

     

  所谓加速比就是优化前的耗时与优化后耗时的比值。加速比越高,表明优化效果越明显。图1.8显示了Amdahl公式的推导过程,其中n表示处理器个数,T表示时间,T1表示优化前耗时(也就是只有1个处理器时的耗时),Tn表示使用n个处理器优化后的耗时。F是程序中只能串行执行的比例。

2、Gustafson定律

  Gustafson定律也试图说明处理器个数、串行化比例和加速比之间的关系,如图1.12所示,但是Gustafson定律和Amdahl定律的角度不同。同样,加速比都被定义为优化前的系统耗时除以优化后的系统耗时。

  

  可以看到,由于切入角度的不同,Gustafson定律的公式和Amdahl定律的公式截然不同。从Gustafson定律中,我们可以更容易地发现,如果串行化比例很小,并行化比例很大,那么加速比就是处理器的个数。只要不断地累加处理器,就能获得更快的速度。

3、是否相互矛盾

 

 

   Amdahl定律和Gustafson定律的结论不同,这是不是说明这两个理论之间有一个是错误的呢?其实不然,两者的差异其实是因为这两个定律对同一个客观事实从不同角度去审视后的结果,它们的侧重点有所不同。

  举一个生活中的例子,一辆汽车行驶在60km的路上,你花了一个小时,行驶了30km。无论接下来开多快,你都不可能达到90km/h的速度。图1.13很好地说明了原因。

  

  求解图1.13中的方程,你会发现如果想达到90km的时速,那么你从AB中点到达B点的时间会是一个负数,这显然不是一个合理的结论。实际上,如果前半程30km你使用了一小时,那么即使你从中点到B点使用光速,也只能把整体的平均时速维持在60km/h。

  也就是说Amdahl强调:当串行化比例一定时,加速比是有上限的,不管你堆叠多少个CPU参与计算,都不能突破这个上限!

  而Gustafson定律的出发点与之不同,对Gustafson定律来说,不管你从A点出发的速度有多慢,只要给你足够的时间和距离,只要你后期的速度比期望值快那么一点点,你总是可以把平均速度调整到非常接近那个期望值的。比如,你想要达到均速90km/h,即使在前30km你的时速只有30km/h,你只要在后面的速度达到91km/h,给你足够的时间和距离,总有一天可以把均速提高到90km/h。

  因此,Gustafson定律关心的是:如果可被并行化的代码所占比例足够大,那么加速比就能随着CPU的数量线性增长。

  所以,这两个定律并不矛盾。从极端的角度来说,如果系统中没有可被并行化的代码(即F = 1),那么对于这两个定律,其加速比都是1。反之,如果系统中可被并行化代码的比例达到100%,那么这两个定律得到的加速比都是n(处理器个数)。

 

 

 

posted @ 2019-11-28 22:52  jackcto  阅读(332)  评论(0)    收藏  举报