Gustafson定律由美国计算机科学家John Gustafson及其合作者于1988年提出。Amdahl定律的隐含前提是串行部分所占比例是固定的,而Gustafson有以下两点假设:
问题规模增加后,不能并行执行部分的规模是固定的,换句话说在多处理器上串行执行的时间是固定的。
程序在多处理器上执行的总时间是常数。
仍然假设串行部分占总单处理器上的顺序执行时间的比例为 f,在单处理器上顺序执行时间为ts 。这样在多处理器上执行时,将执行时间分为两部分:顺序部分执行时间为 s = fts,可并行化部分执行时间为 r = (1-f)ts/p ,在多处理器上并行执行时总的时间为 tp =fts+(1-f)ts/p 。
由Gustafson的假设前提条件,总的并行执行时间为常数,假设 tp = s +r = fts+(1-f)ts/p =1 ,对该公式做一些代数变换,可以得到:fts+(1-f)ts = p + (1-p)fts
这就是Gustafson定律,由它的另外一个前提,串行部分的执行时间是规定的,因此fts就是常数。假设常数K=fts,那么上式可以写成以下形式:S(p)=p+(1-p)K=K+(1-K)p。由此不难看出,加速比 和处理器个数 p 呈线性增长关系。比如说K=0.01,那么在1024个处理器上所能达到的加速比为S(1024) = 0.01 + (1-0.01)×1024 = 1013.77。下图给出了几种不同K(图片来自维基百科,其中的a就是我们所说的K,x就是p)的取值情况下的加速比和处理器个数的关系图:
从图中也可以看出,在K值固定的情况下,加速比和处理器个数是呈线性增长的。Gustafson定律描述了增加处理器数目的同时相应的增大问题规模对加速比的影响,Gustafson定律认为此时加速比是线性的(执行时间不增加),实际上这种情况只在解决问题的时间和规模之间存在线性关系的时候成立,如果其关系非线性,那么就不成立。
参考文献与推荐阅读:
【1】Dr Aaron Harwood,The University of Melbourne 并行与多核计算课程材料
【2】周伟明,多核计算与程序设计,华中科技大学出版社,2009年