Gustafson定律由美国计算机科学家John Gustafson及其合作者于1988年提出。Amdahl定律的隐含前提是串行部分所占比例是固定的,而Gustafson有以下两点假设:

  1. 问题规模增加后,不能并行执行部分的规模是固定的,换句话说在多处理器上串行执行的时间是固定的。

  2. 程序在多处理器上执行的总时间是常数。

1988年,Sandia实验室在具有 1024个处理器的超立方体结构上观察到了3个实际应用程序发生了超线性加速现象,3个应用实际可以达到的加速比分别为1021、1020、1016。这个结果可以说是非常振奋人心的,它表明了在实际情况中是有可能得到线性加速比的,这和Amdahl定律预测并不符合。

仍然假设串行部分占总单处理器上的顺序执行时间的比例为 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)的取值情况下的加速比和处理器个数的关系图:

或者我们也可以从另外一个角度来解释Gustafson定律。设想一个使用p个处理器来计算的并行程序,其总执行时间由两部分组成,即串行部分 s 和并行部分 r,为了代数上的方便,我们令s + r = 1。单独一个处理器的执行时间将是  s + p r,因此加速因子(speedup factor)就变成:

从图中也可以看出,在K值固定的情况下,加速比和处理器个数是呈线性增长的。Gustafson定律描述了增加处理器数目的同时相应的增大问题规模对加速比的影响,Gustafson定律认为此时加速比是线性的(执行时间不增加),实际上这种情况只在解决问题的时间和规模之间存在线性关系的时候成立,如果其关系非线性,那么就不成立。

参考文献与推荐阅读:
【1】Dr Aaron Harwood,The University of Melbourne 并行与多核计算课程材料
【2】周伟明,多核计算与程序设计,华中科技大学出版社,2009年

Gustafson定律相关推荐

  1. Amdahl定律和Gustafson定律

    本文摘自 葛一鸣 老师的<实战java高并发程序设计>一书.因为觉得写得好就摘下来了 将串行程序改造成并发程序,一般来说可以提高程序的整体性能,但是究竟能提升多少,甚至说究竟是否真的可以提 ...

  2. 论文:Amdahl(阿姆达尔定律)与Gustafson(古斯塔夫森定律)。

    在高并发程序设计中有两个非常重要的定律: Amdahl(阿姆达尔定律) Gustafson定律(古斯塔夫森定律) 这两个定律从不同的角度诠释了加速比与系统串行化程度.cpu核心数之间的关系,它们是我们 ...

  3. 并发编程下的性能定律(翻译)

    并发编程下的性能定律(翻译) 理解Amdahl定律 如果你想利用多核的优势在尽可能少的时间运行尽可能多的指令,那么就需要以并行的序列分离代码.然而,大多的算法需要运行一些串行代码来调整并行执行.例如, ...

  4. 并行开发的基本概念及两个重要的定律

    并行开发的基本概念: 同步(Synchronous)和异步(Asynchronous) 同步和异步通常用来形容一次方法的调用.同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为.异 ...

  5. Amdahl's law and Gustafson's law

    在高并发程序设计中有两个非常重要的定律: Amdahl(阿姆达尔定律) Gustafson定律(古斯塔夫森定律) 这两个定律从不同的角度诠释了加速比与系统串行化程度.cpu核心数之间的关系,它们是我们 ...

  6. java高并发系列 - 第3天:有关并行的两个重要定律

    java高并发系列第3篇文章,一个月,咱们一起啃下java高并发,欢迎留言打卡,一起坚持一个月,拿下java高并发. 有关为什么要使用并行程序的问题前面已经进行了简单的探讨.总的来说,最重要的应该是处 ...

  7. 多核cpu应用场景_操作系统基础11-关于多核编程

    之前,CPU的性能还主要取决于CPU的主频,经过超摩尔定律的发展后,没过多长时间CPU的主频速度就已接近"极限",使得单单靠提高CPU的主频来提升性能变得非常困难. 目前,Inte ...

  8. Java多线程知识小抄集(四)——完结

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. 如何提升网站的性能?

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

最新文章

  1. Swift2.0语言教程之Swift2.0语言中的标准函数
  2. Android之版本检测和更新
  3. 赶紧收藏!非常实用的 30 个 Python 技巧
  4. RDBMS即关系数据库管理系统(Relational Database Management System)
  5. 读书笔记——第八周学习笔记
  6. ctf xss利用_Csrf+Xss组合拳
  7. matlab双峰模型,为什么用MATLAB画的高斯双峰曲线不能永双高斯函数拟合?
  8. 深入理解HTTP消息头
  9. Xshell6已过期的解决方案
  10. 虚拟机系统iso镜像下载_微软Windows 10 Build 19013(20H1)简体中文版ISO镜像可供下载...
  11. 微信小程序实现仿美团外卖饿了么左右联动页面
  12. asp.net社区户籍档案管理系统
  13. cd linux制作u盘启动盘,【cdlinux u盘启动】cdlinux制作U盘启动盘详细教程
  14. Web前端学习笔记(五)--- 手风琴菜单
  15. Altas 200 DK环境配置
  16. 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)
  17. 如何把PDF转Word?建议收藏这些方法
  18. 推荐一些好的英语python书籍知识点
  19. 全向移动机器人运动参数校准
  20. 手把手教你做多重线性逐步回归

热门文章

  1. 2016.11.1小鹿三单视频听译
  2. ArcGis画简单的行政图的详细步骤
  3. python uiautomation选择list内容_蜗牛笔记-文章-UIAutomation运用
  4. android 先拍照后对焦,先拍照后对焦 HTC One M8现场真机试玩
  5. 在线转换,直接将dwg转换成jpg
  6. 经典论文解读 — 端到端的VL预训练网络SOHO
  7. 数据结构详解:图(Graph)
  8. php微博 百度文库,新浪微博与百度贴吧移动社交功能的竞品分析
  9. python人机交互界面设计_python_GUI页面开发
  10. 全国科技者工作日:关注科技工作者的工作与贡献,共创美好未来