阿姆达尔定律
阿姆达尔定律可以用来计算处理器平行运算之后效率提升的能力。阿姆达尔定律因 Gene Amdal 在 1967 年提出这个定律而得名。绝大多数使用并行或并发系统的开发者有一种并发或并行可能会带来提速的感觉,甚至不知道阿姆达尔定律。不管怎样,了解阿姆达尔定律还是有用的。
我会首先以算术的方式介绍阿姆达尔定律定律,然后再用图表演示一下。
阿姆达尔定律定义
一个程序(或者一个算法)可以按照是否可以被并行化分为下面两个部分:
- 可以被并行化的部分
- 不可以被并行化的部分
假设一个程序处理磁盘上的文件。这个程序的一小部分用来扫描路径和在内存中创建文件目录。做完这些后,每个文件交个一个单独的线程去处理。扫描路径和创建文件目录的部分不可以被并行化,不过处理文件的过程可以。
程序串行(非并行)执行的总时间我们记为 T。时间 T 包括不可以被并行和可以被并行部分的时间。不可以被并行的部分我们记为 B。那么可以被并行的部分就是 T-B。下面的列表总结了这些定义:
- T = 串行执行的总时间
- B = 不可以并行的总时间
- T- B = 并行部分的总时间
从上面可以得出:
T = B + (T – B)
首先,这个看起来可能有一点奇怪,程序的可并行部分在上面这个公式中并没有自己的标识。然而,由于这个公式中可并行可以用总时间 T 和 B(不可并行部分)表示出来,这个公式实际上已经从概念上得到了简化,也即是指以这种方式减少了变量的个数。
T- B 是可并行化的部分,以并行的方式执行可以提高程序的运行速度。可以提速多少取决于有多少线程或者多少个 CPU 来执行。线程或者 CPU 的个数我们记为 N。可并行化部分被执行的最快时间可以通过下面的公式计算出来:
(T – B ) / N
或者通过这种方式
(1 / N) * (T – B)
维基中使用的是第二种方式。
根据阿姆达尔定律,当一个程序的可并行部分使用 N 个线程或 CPU 执行时,执行的总时间为:
T(N) = B + ( T – B ) / N
T(N)指的是在并行因子为 N 时的总执行时间。因此,T(1)就执行在并行因子为 1 时程序的总执行时间。使用 T(1)代替 T,阿姆达尔定律定律看起来像这样:
T(N) = B + (T(1) – B) / N
表达的意思都是是一样的。
一个计算例子
为了更好的理解阿姆达尔定律,让我们来看一个计算的例子。执行一个程序的总时间设为 1。程序的不可并行化占 40%,按总时间 1 计算,就是 0.4,可并行部分就是 1–0.4=0.6.
在并行因子为 2 的情况下,程序的执行时间将会是:
T(2) = 0.4 + ( 1 - 0.4 ) / 2
= 0.4 + 0.6 / 2
= 0.4 + 0.3
= 0.7
在并行因子为 5 的情况下,程序的执行时间将会是:
T(5) = 0.4 + ( 1 - 0.4 ) / 5
= 0.4 + 0.6 / 6
= 0.4 + 0.12
= 0.52
阿姆达尔定律图示
为了更好地理解阿姆达尔定律,我会尝试演示这个定定律是如何诞生的。
首先,一个程序可以被分割为两部分,一部分为不可并行部分 B,一部分为可并行部分 1–B。如下图:
在顶部被带有分割线的那条直线代表总时间 T(1)。
下面你可以看到在并行因子为 2 的情况下的执行时间:
并行因子为 3 的情况:
优化算法
从阿姆达尔定律可以看出,程序的可并行化部分可以通过使用更多的硬件(更多的线程或 CPU)运行更快。对于不可并行化的部分,只能通过优化代码来达到提速的目的。因此,你可以通过优化不可并行化部分来提高你的程序的运行速度和并行能力。你可以对不可并行化在算法上做一点改动,如果有可能,你也可以把一些移到可并行化放的部分。
优化串行分量
如果你优化一个程序的串行化部分,你也可以使用阿姆达尔定律来计算程序优化后的执行时间。如果不可并行部分通过一个因子 O 来优化,那么阿姆达尔定律看起来就像这样:
T(O, N) = B / O + (1 - B / O) / N
记住,现在程序的不可并行化部分占了 B / O 的时间,所以,可并行化部分就占了 1 - B / O 的时间。
如果 B 为 0.1,O 为 2,N 为 5,计算看起来就像这样:
T(2,5) = 0.4 / 2 + (1 - 0.4 / 2) / 5
= 0.2 + (1 - 0.4 / 2) / 5
= 0.2 + (1 - 0.2) / 5
= 0.2 + 0.8 / 5
= 0.2 + 0.16
= 0.36
运行时间 vs. 加速
到目前为止,我们只用阿姆达尔定律计算了一个程序或算法在优化后或者并行化后的执行时间。我们也可以使用阿姆达尔定律计算加速比(speedup),也就是经过优化后或者串行化后的程序或算法比原来快了多少。
如果旧版本的程序或算法的执行时间为 T,那么增速比就是:
Speedup = T / T(O , N);
为了计算执行时间,我们常常把 T 设为 1,加速比为原来时间的一个分数。公式大致像下面这样:
Speedup = 1 / T(O,N)
如果我们使用阿姆达尔定律来代替 T(O,N),我们可以得到下面的公式:
Speedup = 1 / ( B / O + (1 - B / O) / N)
如果 B = 0.4, O = 2, N = 5, 计算变成下面这样:
Speedup = 1 / ( 0.4 / 2 + (1 - 0.4 / 2) / 5)
= 1 / ( 0.2 + (1 - 0.4 / 2) / 5)
= 1 / ( 0.2 + (1 - 0.2) / 5 )
= 1 / ( 0.2 + 0.8 / 5 )
= 1 / ( 0.2 + 0.16 )
= 1 / 0.36
= 2.77777 ...
上面的计算结果可以看出,如果你通过一个因子 2 来优化不可并行化部分,一个因子 5 来并行化可并行化部分,这个程序或算法的最新优化版本最多可以比原来的版本快 2.77777 倍。
测量,不要仅是计算
虽然阿姆达尔定律允许你并行化一个算法的理论加速比,但是不要过度依赖这样的计算。在实际场景中,当你优化或并行化一个算法时,可以有很多的因子可以被考虑进来。
内存的速度,CPU 缓存,磁盘,网卡等可能都是一个限制因子。如果一个算法的最新版本是并行化的,但是导致了大量的 CPU 缓存浪费,你可能不会再使用 xN 个 CPU 来获得 xN 的期望加速。如果你的内存总线(memory bus),磁盘,网卡或者网络连接都处于高负载状态,也是一样的情况。
我们的建议是,使用阿姆达尔定律定律来指导我们优化程序,而不是用来测量优化带来的实际加速比。记住,有时候一个高度串行化的算法胜过一个并行化的算法,因为串行化版本不需要进行协调管理(上下文切换),而且一个单个的 CPU 在底层硬件工作(CPU 管道、CPU 缓存等)上的一致性可能更好。
相关推荐
计算机系统结构基础概念与CPI阿姆达尔定律 计算机系统结构是计算机科学的核心部分,它研究计算机的基本结构、工作原理和设计方法。计算机系统结构的基础概念包括计算机的性能指标、CPI(Cycles Per Instruction)、...
阿姆达尔定律(Amdahl's Law)是计算机性能优化领域的一个重要理论,由Gene Amdahl在1967年提出。这个定律主要用于描述在系统改进或升级时,整体性能提升的理论上限。它表明,即使部分组件的性能得到显著提高,如果...
使用场景:本资源主要用于辅助系统分析师的软考;适用人群:系分备考者、产品经历、软件开发等,也适用于有...内容概要:各系统的性能评价,以及阿姆达尔定律常考内容;其他:思维导图的方式介绍知识点,标注重点和示例
"阿姆达尔定律在计算机体系结构中的应用和研究" 阿姆达尔定律是计算机科学家吉恩·阿姆达尔在 1967 年提出的一个关于并行计算的定律。该定律是一种用来描述并行计算性能提升的数学模型。它假设一个计算任务可以分为...
阿姆达尔定律指出,如果一个任务可以被分解成可并行计算和不可并行计算两部分,那么增加处理核心的数量并不能线性地提高整体运行效率。计算公式为 (W_s + W_p) / (W_s + W_p/n),其中W_s是串行部分,W_p是并行部分,...
文章还深入探讨了并行系统的性能评估方法,包括利用阿姆达尔定律分析并行度的影响和利特尔法则评估系统响应特性。此外,对于并行系统的评估工具SPEC基准测试套件的功能特点进行了介绍,强调了其标准化、全面性和公正...
阿姆达尔定律是并行计算性能优化的重要理论基础,但在多GPU混合架构中,需要考虑CPU与GPU间的协同工作以及通信延迟等复杂因素。 针对此问题,本文提出了一个基于阿姆达尔定律的多GPU调度模型,旨在有效平衡各个GPU...
示例: 阿姆达尔定律 阿姆斯特朗公理 阿帕网 埃尔布朗基 埃尔米特函数 安全标号 安全操作系统 安全策略 安全措施 安全等级 安全电子交易 安全功能评估 安全过滤器 安全...
7. **古斯塔夫定律**(Gustafson's law):由John Gustafson提出,是对阿姆达尔定律的一种反驳,指出当问题规模足够大时,即使小比例的工作无法并行,增加并行度仍然可以显著提高整体处理速度。 8. **孙贤和-倪明选...
复习提纲中的内容主要围绕计算机的历史、系统结构、透明性、软硬件取舍原则、阿姆达尔定律、性能评估以及软件、应用、器件对系统结构的影响。 1. 计算机发展历史:最早的计算机是电子管计算机,随着时间的推移,...
与此同时,阿姆达尔定律(Amdahl's Law)和迈尔霍尔德定律(Myhrvold's Law)揭示了系统性能提升的局限性和潜在收益。阿姆达尔定律指出,即使系统中有部分可以并行化,但系统的总体性能仍然受限于不可并行部分的性能...
然而,现有的性能分析理论,如阿姆达尔定律和古斯塔夫森定律,对于分布式机器学习系统的指导作用有限。阿姆达尔定律关注单个计算系统内部的并行性,而忽略了分布式存储和I/O通信等重要因素。古斯塔夫森定律则假设...
阿姆达尔定律是另一种计算 CPU 性能的方法,但它需要直接测量某种指令的执行时间在总执行时间中所占的比例,而这通常是通过计算指令的执行次数和指令的执行时间的乘积间接得到的。使用 CPU 性能公式可以更方便地计算...
阿姆达尔定律指出,如果程序中的一部分只能被优化,而剩余部分无法被优化,那么整个程序的最大可能提速受限于无法优化部分所占的比例。公式表示为“Speedup overall = Execution time old / Execution time new = 1 ...
除了基本的时间和空间复杂度分析,还有其他高级分析方法,如渐进分析、摊还分析和阿姆达尔定律。渐进分析关注算法在大规模输入下的行为,忽略低阶项和常数因子。摊还分析则试图在一系列操作的平均意义上证明算法的...
阿姆达尔定律描述了在一个部分可并行化的程序中,无论有多少处理器,程序的加速比总是受限于其中不可并行的部分。具体而言,如果一个程序中有一部分必须顺序执行(用f表示这一比例),那么即使其余部分都可以并行化...
摩尔定律虽然预示着处理器核心数量的快速增长,但性能的提升并不总是与核心数量成正比,这主要受到阿姆达尔定律的限制。阿姆达尔定律指出,程序的加速比受限于其串行部分的比例。如果一个程序80%的部分可以并行化,...
阿姆达尔定律则提供了一种定量分析系统性能改进的方法,指出即使某个部件的性能得到了提升,如果其他部分没有相应改进,那么整个系统的性能提升也是有限的。这意味着在设计并行系统时,需要综合考虑所有组件的优化。...
9. **阿姆达尔定律**(28-阿姆达尔定律.doc): 阿姆达尔定律描述了系统改进部分对整体性能提升的理论上限。在并发编程中,这意味着即使优化了部分代码,如果其他部分仍然是瓶颈,整体性能的提升也会受到限制。因此...