阿姆达尔定律是一个计算机科学界的经验法则,因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的核数不断增加,目前我们的数据库服务器四核、六核已经比较常见,但有时我们会发现虽然拥有更多的核,当我们同时运行几个程序时,只有少数几个线程处于工作中,其它的并未做什么工作,实践当中,并行运行多个线程往往并不能显著提升性能,程序往往并不能有效的利用多核。在多核处理器中加速比是衡量并行程序性能的一个重要参数,能否有效降低串行计算部分的比例和降低交互开销决定了能否充分发挥多核的性能,其中的关键在于:合理划分任务、减少核间通信。

https://blog.csdn.net/u011186240/article/details/98600436

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

  1. 阿姆达尔定律(Amdahl’s Law)

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

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

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

  3. 阿姆达尔定律和Gustafson law

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

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

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

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

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

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

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

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

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

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

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

  9. Amdahl's law and Gustafson's law

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

  10. 阿姆达尔定律和古斯塔夫森定律

    摘要 构建软件的并行版本可使应用在更短的时间内运行指定的数据集,在固定时间内运行多个数据集,或运行非线程软件禁止运行的大型数据集. 并行化的成功通常通过测量并行版本的加速(相对于串行版本)来进行量化. ...

最新文章

  1. python09-魔法方法
  2. 【MySQL】Dockerfile书写简单示例
  3. 16位灰度数据成像_16位 250M双通道PCI数据采集卡 FCFR-PCI9808
  4. Spring MVC一事务控制问题
  5. rtx3080 pytorch cuda_最不值得买的高端显卡!RTX3080从真香变成了鸡肋?|显卡|amd|RTX3080...
  6. 德勤发布2020技术趋势报告,五个新趋势可引发颠覆性变革
  7. 信息安全工程师-AES密码技术及XOR图像遮盖技术(JavaC++)
  8. 基于.NET实现数据挖掘--关联规则分析算法
  9. html转json有危险字符,javascript
  10. 大数据发展的7个趋势 -- 阿里技术专家权威解读
  11. 怎么查看视频的md5值
  12. Linux中uuid是什么?UUID由几部分组成?
  13. K8S中的pod、services、容器的概念和区别
  14. word2vec初步使用
  15. ECharts 柱状图上显示数据,并自定义图标
  16. 08. 路由器的基本配置和Talent配置
  17. 关于“提升产品质量”和“提升测试能力” (三)聚焦
  18. NVIDA GPU架构演进(2022年更新)
  19. windows下查看lib,dll包含函数名
  20. Opencv2.4.9鼠标操作

热门文章

  1. VDI成长之路:Windows桌面优化配置(持续更新-20120227)
  2. Hosts 文件切换工具
  3. python 可变参数示例
  4. java生产环境增量发版陷阱【原】
  5. Spring AOP动态代理原理与实现方式
  6. phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式
  7. C++11实现模板手柄:委托构造函数、defaultkeyword分析
  8. C# UDP 发送 接收
  9. 【原】上一学年的课程设计
  10. 我在这战斗的一年里(阎阳生)