再次聊 Amdahl 定律和 Gustafson 定律

因为考研,这个专题耽搁了,之前提过这个定律但是不深。本来想继续之前的位置读,不过考虑到很久没看了,就来重读一遍,没想到能获得新的理解

Amdahl 定律

Amdahl 这个名字还真难记,查了一下,老爷子生平经历还是值得一看的,本人也是瑞典和挪威混血,15 年因为肺癌去世 RIP。

其实 Amdahl 定律S=1(1α)+α/kS=\frac{1}{(1-\alpha)+\alpha/k}是一个解决一定数据集下并行处理在整体的占比和整体运算速度影响的一种定律(α\alpha为占比,kk为芯片数)。

这个公式比较好理解,假设整体串行处理的时间为 1,则优化之后的时间就是串行部分1α1-\alpha和并行部分α/k\alpha/k的和。

如果 k 是无限多个,则整体速度比则无限趋近于11α\frac{1}{1-\alpha},即整个系统串行和加上并行之后串行时间之比。

Gustafson 定律

Gustafson 则是另一个角度,假定串行时间是 a,单一线程处理并行数据时间是 b,则完全串行运行的时间为 a+nb,实际运行时间为 a+b,那么速度比为S=a+nba+bS=\frac{a+nb}{a+b}

F=aa+bF=\frac{a}{a+b}即串行在整体项目中的占比,经过化简得S=(1n)F+nS=(1-n)F+n也就是串行占比足够小的时候,加速比就是芯片数。

Gustafson 定律解决了 Amdohl 定律必须要求数据集一定的前提。但是也有许多争议,比如处理非线性问题时可能不会有理想的结果。