• 推导
  • 局限性
  • 串行程序的优化
  • 和边际收益递减规律的关系
  • 举例

阿姆达尔定律给出了任务在固定负载的情况下,随着系统资源的提升,执行速度的理论上限。以计算机科学家Gene Amdahl命名。

Slatency(s)=1(1−p)+psSlatency(s)=1(1−p)+ps

其中 
SlatencySlatency: 整个任务的提速比。 
s: 部分任务得益于系统资源升级带来的提速比。 
p: 这部分任务执行时间占整个任务执行时间的百分比(系统资源提升前)。

从上可以得到:

{Slatency(s)≤11−plims→0Slatency(s)=11−p{Slatency(s)≤11−plims→0Slatency(s)=11−p

以上公式说明了通过资源升级来给任务加速的加速比上限,而且和提速的幅度无关,理论加速比总是受限于不能加速的任务的比例。

阿姆达尔的定律常用于并行计算中,用来估计多处理器情况下的理论加速比。例如,如果有个程序在单核下需要执行20个小时,并且不能被并行处理的部分占1个小时的执行时间,剩余的19个小时(p=0,95)的任务可以并行化,那么不管有多少核心来并行处理这个程序,最小执行时间不可能小于一个小时。由此得到,理论加速比的上限是20倍(1/(1-p) = 20)。因此,并行计算只和少数的核心和极度可并行化的程序相关。

1. 推导


把一个任务放在资源可提升的系统中执行和在原生系统中执行做比较,可以把这个任务分为两个部分: 
- 不能从系统资源提升收益的部分 
- 能通过资源提升加速的部分

例如, 有这样一个程序,它负责处理磁盘文件。这个程序的一部分扫描磁盘上的目录然后在内存中创建文件列表。完成以后,程序的另一部分把每一个文件传给各个线程去处理。那么,扫描目录并且创建文件列表的部分并不能在并行计算机上获得加速,但是处理文件的部分可以通过并行计算加速。

在系统资源提升以前,整个任务的执行时间用TT表示。它TT包含上面介绍的两部分执行时间。能够获益于系统资源的部分执行时间占比用pp表示。不能获益的程序比例就是1−p1−p,那么

T=(1−p)T+pT.T=(1−p)T+pT.

获得加速后的部分执行时间变为

psT.psT.

因此,加速后总的执行时间为

T(s)=(1−p)T+psT.T(s)=(1−p)T+psT.

假定负载是W,那么阿姆达尔定律给出了负载W下的时间加速比,得到

Slatency(s)=TWT(s)W=TT(s)=11−p+ps.Slatency(s)=TWT(s)W=TT(s)=11−p+ps.

2. 举例


例一

如果30%的执行时间是可以加速的,那么p=0.3,如果加速比是2, 即s=2,那么由阿姆达尔定律得到全局加速比为

Slatency=11−p+ps=11−0.3+0.32=1.18.Slatency=11−p+ps=11−0.3+0.32=1.18.

例二

有一个串行任务,可以分成连续执行的四个部分,这四个部分的执行时间占分别为p1=0.11, p2=0.18, p3=0.23, p4=0.48。假设第一部分不能加速,即s1=1,第二部分s2=5,第三部分s3=20,第四部分s4=1.6。通过阿姆达尔定律可知,全局加速比为

Slatency=1p1s1+p2s2+p3s3+p4s4=10.111+0.185+0.2320+0.481.6=2.19.Slatency=1p1s1+p2s2+p3s3+p4s4=10.111+0.185+0.2320+0.481.6=2.19.

注意第二部分和第三部分的20倍提速和5倍提速是如何被第四部分(48%占比)的1.6倍加速给拉下来的。

3. 和边际收益递减规律的关系


阿姆达尔定律经常和边际收益递减规律混为一谈,尽管只有在特定的情形下应用阿姆达尔定律才展现出边际递减率。如果选择了最佳的部分来提速,那么我们会看到随着资源的进一步提升,获得的加速是单调递减的。如果选择的不是最优,那么继续提升最关键部分还是能看到明显的提高。注意实际情况中,这种通过改善非最优部件来提升系统性能的事情是合理的,因为提升关键部分常常会更加困难,或者花费更多时间。

如果你是在运行一个固定计算量的程,而且正在考虑随着机器处理核心数量的增加伴随而来的收益,那么阿姆达尔定律确实展现了边际递减。每个新增加的处理器带来的性能比前一个处理器带来的要小。每次处理核心数加倍,加速比减小,最终趋向于1/(1-p)。

这样的分析忽略了其他潜在的瓶颈,例如内存带宽和I/O带宽,如果它们不随这核心数目提升,那么把这些瓶颈考虑进去更加显现了纯粹通过增加处理器所具有的边际递减规律。

4. 串行程序的优化


For example, with a serial program in two parts A and B for which TA = 3 s and TB = 1 s,

假如有个串行程序,可以分为两个部分A和B, TA = 3s,TB = 1s。 
- 如果B提速5倍, 即s=5,p = TB/(TA + TB) = 0.25,那么

Slatency=11−0.25+0.255=1.25;Slatency=11−0.25+0.255=1.25;

- 如果A提速两倍,即s=2, p = TA/(TA + TB) = 0.75,那么

Slatency=11−0.75+0.752=1.60.Slatency=11−0.75+0.752=1.60.

因此,把A加速两倍优于把B加速5倍。速度的提升比例可以这么计算

percentage improvement=100(1−1Slatency).percentage improvement=100(1−1Slatency).

由此

  • A提速两倍带来37.5%的整体加速。
  • B提速5倍只能带来整体20%的提速。

5. 局限性


阿姆达尔定律只能用在固定范围的问题上面。在实际中,随着可用的计算资源越来越多,这些资源倾向于用于更大的问题上面(更大的数据集),而且并行部分上的时间开销通常比串行工作增长要快。在这样的情况下,(Gustafson’s law)古斯塔夫森定律给出了更佳的接近实际的针对并行计算性能的评估[1]。

[1] Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. p. 61.

文章源: https://en.wikipedia.org/wiki/Amdahl%27s_law

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

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

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

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

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

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

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

  4. 阿姆达尔定律和Gustafson law

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 弹性网络_理论物理所建立解析模型研究凝胶网络弹性介导的液液相分离现象
  2. linux启停was命令,linux下的启停脚本
  3. 2021-02-21 代码不规范,运维两行泪 代码规范
  4. Php底层深度探索(2)---Apache运行机制剖析 王泽宾
  5. bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势) | CN-SEC 中文网
  6. Java技术图谱!黑马java培训课程目录
  7. 本学期关于Android学习的总结
  8. 反需求函数和边际收益_如何通俗的解释边际成本和边际收益?
  9. 如何在负载均衡上将 HTTP 流量重定向到 HTTPS?
  10. 二叉树的顺序存储和三种遍历(二)
  11. 为什么Google要将LiveData设计成粘性的
  12. oreo另一个意思_孑孓、仄亾、片爿…看起来天生一对的字,意思竟然大不同
  13. AD_Copy Room
  14. [逆向工程] 二进制拆弹Binary Bombs 快乐拆弹 详解
  15. 全新UI运营级在线客服系统源码+无授权/带教程
  16. NDK_PROJECT_PATH=null
  17. 腾讯资深产品经理谈敏捷开发于游戏
  18. canvas插件 fabric.js 使用
  19. 吃货 JYY / Foodie
  20. 【原创】道氏点的精要交易,简单才是最赚钱的

热门文章

  1. 这一篇彻底搞懂JS中的prototype、__proto__与constructor真的很好
  2. JavaWeb(2)CSS
  3. 攻防世界——web高手进阶区题解
  4. java memcached incr_Redis与Memcached的incr/decr差异对比
  5. win10将HTML动态做桌面壁纸,用win10自带工具,win10专业版简易制作动态壁纸教程...
  6. 【比赛总结】从编程位队长的角度看待第十三届华中杯数学建模比赛A题
  7. 首批接入司法数据的网贷平台已拒贷3万余失信被执行人
  8. PTA 7-256 五分制成绩(函数实现)
  9. python 堆叠柱状图 多列 复杂_[Python Study Notes]堆叠柱状图绘制
  10. java程序设计基础实验_JAVA程序设计基础实验1.doc