阿姆达尔定律是一个计算机科学界的经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名。吉恩·阿姆达尔在1967年发表的论文中提出了这个重要定律。

阿姆达尔定律主要用于发现仅仅系统的部分得到改进,整体系统可以得到的最大期望改进。它经常用于并行计算领域,用来预测适用多个处理器时理论上的最大加速比。在我们的性能调优领域,我们利用此定律有助于我们解决或者缓解性能瓶颈问题

阿姆达尔定律的模型阐释了我们现实生产中串行资源争用时候的现象。如下图模型,一个系统中,不可避免有一些资源必须串行访问,这限制了我们的加速比,即使我们增加了并发数(横轴),但取得效果并不理想,难以获得线性扩展能力(图中直线)。

以下介绍中、系统、算法、程序可以认为都是优化的对象,我不加以区分,它们都有串行的部分和可以并行的部分。

在并行计算中,使用多个处理器的程序的加速比受限制于程序串行部分的执行时间。例如,如果一个程序使用一个CPU核执行需要20小时,其中部分代码只能串行,需要执行1个小时,其他19小时的代码执行可以并行,那么,不考虑有多少CPU可用来并行执行程序,最小执行时间不会小于1小时(串行工作的部分),因此加速比被限制为最多20倍(20/1)。

加速比越高,证明优化效果越明显。

阿姆达尔定律可以用如下公式表示:

s( n ) 固定负载下,理论上的加速比。

B 串行工作部分所占比例,取值0~1,

n 并行线程数、并行处理节点个数

以上公式说明:

加速比=没有改进前的算法耗时/改进后的算法耗时。

如果我们假定算法没有改进之前,执行总时间是1(假定为1个单元)。那么改进后的算法,其时间应该是串行工作部分的耗时(B)加上并行部分的耗时(1-B)/n,由于并行部分可以在多个cpu核上执行,所以并行部分实际的执行时间是(1-B)/n

根据这个公式,如果并行线程数(我们可以理解为CPU处理器数量)趋于无穷,那么加速比与系统的串行工作部分的比例成反比,如果系统中有50%的代码串行执行,那么系统的最大加速比为2。也就是说,为了提高系统的速度,仅增加CPU处理器的数量不一定能起到有效的作用,需要提高系统内可并行化的模块比重,在此基础上合理增加并行处理器数量,才能以最小的投入得到最大的加速比。

我们对阿姆达尔定律做进一步说明。阿姆达尔这个模型 定义了固定负载下,某个算法的并行实现相对串行实现的加速比。例如,某个算法有12%的操作是可以并行执行的,而剩下的88%的操作不能并行,那么阿姆达尔定律声明,最大加速比是1(1-0.12)=1.136。如上公式n趋向于无穷大,那么加速比S=1/B=1/(1-0.12)。

再例如,对于某个算法,可以并行的比例是P,这部分并行的代码能够加速s倍(s可以理解是CPU核的个数,即新代码的执行时间为原来执行时间的1/s)。此算法30%的代码可以被并行加速,那么P等于0.3,这部分代码可以被加速2倍,s等于2。那么,使用阿姆达尔定律计算其整个算法的加速比:

以上公式和前一个公式类似,只是前一个公式的分母用串行比例B来表示。

再例如,某项任务,我们可以分解为4个步骤,P1、P2、P3、P4,执行耗时占总耗时百分比分别是11%、18%、23%、48%。我们对它进行优化,P1不能优化,P2可以加速5倍,P3可以加速20倍,P4可以加速1.6倍。那么改进后的执行时间是:

总的加速比是 1 / 0.4575 = 2.186 。我们可以看到,虽然有些部分加速比有20倍,5倍,但总的加速比并不高,略大于2,因为占时间比例最大的P4部分仅仅加速了1.6倍。

对于如下的图,我们可以观察到,加速比受限制于串行工作部分的比例,当95%的代码都可以进行并行优化时,理论的最大大加速比会更高,但最高不会超过20倍。

阿姆达尔定律也用于指导CPU的可扩展设计。CPU的发展有两个方向,更快的CPU或者更多的核。目前看来发展的重心偏向了CPU的核数,随着技术的不断发展,CPU的核数不断增加,目前我们的数据库服务器四核、六核已经比较常见,但有时我们会发现虽然拥有更多的核,当我们同时运行几个程序时,只有少数几个线程处于工作中,其它的并未做什么工作,实践当中,并行运行多个线程往往并不能显著提升性能,程序往往并不能有效的利用多核。在多核处理器中加速比是衡量并行程序性能的一个重要参数,能否有效降低串行计算部分的比例和降低交互开销决定了能否充分发挥多核的性能,其中的关键在于:合理划分任务、减少核间通信。

阿姆达尔定律(Amdahl’s Law)相关推荐

  1. 并行计算系列-阿姆达尔定律(Amdahl‘s Law)

    阿姆达尔定律是一个计算机科学界的经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名.吉恩·阿姆达尔在1967年发表的论文中提出了这个重要定律. 阿姆达尔定律主要用于发现仅仅系统的部分得到改进,整体 ...

  2. 阿姆达尔定律和Gustafson law

    阿姆达尔定律 Strong scaling is a measure of how, for a fixed overall problem size, the time to solution de ...

  3. Amdahl(阿姆达尔定律) Law

    推导 局限性 串行程序的优化 和边际收益递减规律的关系 举例 阿姆达尔定律给出了任务在固定负载的情况下,随着系统资源的提升,执行速度的理论上限.以计算机科学家Gene Amdahl命名. Slaten ...

  4. Amdahl’s law (阿姆达尔定律)的演化和思考

    G.M.Amdahl在1967年提出了Amdahl's law,针对并行处理的scalability给出了一个模型,指出使用并行处理的提速由问题的可并行的部分所决定.这个模型为并行计算系统的设计者提供 ...

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

    首先给出阿姆达尔定律的数学公式描述: S(N)=1(1−p)+pN S(N)=\frac1{(1-p)+\frac pN} pp:程序中可并行部分的程序在单核上执行时间的占比: NN:处理器的数目(总 ...

  6. 阿姆达尔定律 是什么 Amdahl 并行效率计算经验法则

    阿姆达尔定律(Amdahl) 是计算机界的一个经验法则.是以计算机科学家吉恩·阿姆达尔来命名的. 它表示串行执行的计算机程序在并行执行后效率的 提升. 它给 出了使用并行处理理论上能带来的效率提高. ...

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

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

  8. Amdahl's law and Gustafson's law

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

  9. 摩尔定律与阿姆达尔定律

    摩尔定律 当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍 CPU长期都是以指数型快速提高,但是近年来,CPU主频始终保持在4G赫兹左右,无法再进一步提 ...

最新文章

  1. 探子报!双十一紧急军情!!!
  2. 内网通广告弹窗怎么关掉_人民日报批弹窗广告!“弹窗广告”怎么关闭 弹窗广告去除拦截方法...
  3. mysql----innodb统计信息
  4. BugkuCTF-MISC题猫片
  5. DR5白金版 for mac(PS一键磨皮插件Delicious Retouch)支持ps 2022
  6. npm切换淘宝源,yarn切换淘宝源
  7. JDK的下载、安装和配置
  8. 记录一次分组求和查询优化
  9. 双电容单相电机接线图解_单相电机要用电容,三相电机为何不需要?
  10. php 过滤入库不可见字符,php如何过滤不可见字符
  11. 【Maclean Liu技术分享】拨开Oracle优化器迷雾探究Histogram之秘
  12. linux用vi查找字符串替换,Linux中vi进行字符替换
  13. 路由配置:理解secondary ip address
  14. easyUI打开tab页面
  15. android手机8g内存够用嘛,安卓旗舰机8GB运行内存到底够不够用?有必要上12GB吗?...
  16. 【算法】有限状态机FSM
  17. 安徽大学信息安全专业本科生攻略
  18. Javaweb 聊天室
  19. 码农和CTO的差距到底在哪?
  20. 从财报看康佳、创维、TCL、海信能否守住家电市场的“江湖地位”?

热门文章

  1. python时间戳datetime取出年、月、日、时
  2. 不推荐理财保险(分红险、投资连结险等)的几点理由---实际案例分析计算说明
  3. 【R语言】实验五 综合应用
  4. Code Snippets Library
  5. 编程新手该如何调优程序?程序员必备性能调优利器——火焰图
  6. EFR32MG22与TI CC2652RSIP对比
  7. 小白算法练习 lanqiao SPFA+vector 模板
  8. 341.基于高通量测序的微生物组研究技术简介
  9. Word详细教程一(解决word护眼设置,但有些字底色仍是白色的)
  10. XShell6(配置XFTP 文件传输) 安装+简单使用教程