并行瓶颈计算之阿姆达尔定律(Amdahl's Law) & Gustafson's Law

您所在的位置:网站首页 mm定理1和定理2计算题例题 并行瓶颈计算之阿姆达尔定律(Amdahl's Law) & Gustafson's Law

并行瓶颈计算之阿姆达尔定律(Amdahl's Law) & Gustafson's Law

2024-06-06 01:03| 来源: 网络整理| 查看: 265

一、概述 1. Amdahl's Law

     阿姆达尔定律是一个计算机科学界的经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名。吉恩·阿姆达尔在1967年发表的论文中提出了这个重要定律。      阿姆达尔定律主要用于发现仅仅系统的部分得到改进,整体系统可以得到的最大期望改进。它经常用于并行计算领域,用来预测适用多个处理器时理论上的最大加速比。在我们的性能调优领域,我们利用此定律有助于我们解决或者缓解性能瓶颈问题。      阿姆达尔定律的模型阐释了我们现实生产中串行资源争用时候的现象。如下图模型,一个系统中,不可避免有一些资源必须串行访问,这限制了我们的加速比,即使我们增加了并发数(横轴),但取得效果并不理想,难以获得线性扩展能力(图中直线)。

2. Gustafson's Law

     Gustafson定律(Gustafson’s law)阐述了数据并行带来的影响。Gustafson 定律是由 John L. Gustafson 在1988年提出的。是并行计算领域除了 Amdahl 定律之后又一个重要定律。Gustafson定律看待加速比的角度会有所不同,其站在对于大量数据流处理过程中,针对重复工作的分布式运算带来的加速特性,而不仅仅局限在一个单一的程序进程&单一的计算机上,串行的部分主要在于数据的分配预处理以及计算结果的收集汇总处理上。

二、基本理论 1. Amdahl's Law

     以下介绍中、系统、算法、程序可以认为都是优化的对象,我不加以区分,它们都有串行的部分和可以并行的部分。      在并行计算中,使用多个处理器的程序的加速比受限制于程序串行部分的执行时间。例如,如果一个程序使用一个CPU核执行需要20小时,其中部分代码只能串行,需要执行1个小时,其他19小时的代码执行可以并行,那么,不考虑有多少CPU可用来并行执行程序,最小执行时间不会小于1小时(串行工作的部分),因此加速比被限制为最多20倍(20/1),加速比越高,证明优化效果越明显。

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

\[s(n) = \frac{1}{B+(1-B)/n}\tag{1.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)。 Example      例如,对于某个算法,可以并行的比例是P,这部分并行的代码能够加速s倍(s可以理解是CPU核的个数,即新代码的执行时间为原来执行时间的1/s)。此算法30%的代码可以被并行加速,那么P等于0.3,这部分代码可以被加速2倍,s等于2。那么,使用阿姆达尔定律计算其整个算法的加速比:

\[accRate(s) = \frac{1}{1-P+P/s} = \frac{1}{1-0.3+0.3/2} = 1.17647 \tag{2.1.1} \]

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

\[accRate(s) = \frac{1}{P_{1}+P_{2}/5+P_{3}/20+P_{4}/1.6} = 2.186 \tag{2.1.2} \]

总的加速比是 \(1/0.4575 = 2.186\),我们可以看到,虽然有些部分加速比有20倍,5倍,但总的加速比并不高,略大于2,因为占时间比例最大的P4部分仅仅加速了1.6倍。      对于如下的图,我们可以观察到,加速比受限制于串行工作部分的比例,当95%的代码都可以进行并行优化时,理论的最大大加速比会更高,但最高不会超过20倍。(不同曲线代表不同的并行占比)

     阿姆达尔定律也用于指导CPU的可扩展设计,CPU的发展有两个方向,更快的CPU或者更多的核。目前看来发展的重心偏向了CPU的核数,随着技术的不断发展,CPU的核数不断增加,目前我们的数据库服务器四核、六核已经比较常见,但有时我们会发现虽然拥有更多的核,当我们同时运行几个程序时,只有少数几个线程处于工作中,其它的并未做什么工作,实践当中,并行运行多个线程往往并不能显著提升性能,程序往往并不能有效的利用多核。在多核处理器中加速比是衡量并行程序性能的一个重要参数,能否有效降低串行计算部分的比例和降低交互开销决定了能否充分发挥多核的性能,其中的关键在于:合理划分任务、减少核间通信。      以计算机架构师吉恩·阿姆达尔的名字命名的定律,用于寻找仅对系统的一部分进行改进时整个系统预期得到的最大改进。换言之,该定律要讨论的是为什么增加某些东西并不总能带来能力的翻番。该定律可应用在计算机行业,比如研究CPU的核数与性能的关系;在高性能计算领域,该定律可以解释为什么增加节点并不能带来性能的线性改善。

2. Gustafson's Law

     Amdahl 定律有一个重要前提,就是处理的数据集大小是固定的,但是这在大数据计算的领域里,这个假设并不经常能达到,因为人们总是会为了在短时间内处理更多的数据,而为了达到目的,往往会在计算集群增加更多的处理器。      Gustafson 定律的提出,始于 Gustafson 实验室的一个实验,在一个拥有1024个处理器的计算机,观察到了超线性加速比,分别获得了1021x/1020x/1016x的加速比,如果按照 Amdahl定律,1024核并不会得到1000x以上的加速。 1021 for beam stress analysis using conjugate gradients, 1020 for baffled surface wave simulation using explicit finite differences, and 1016 for unstable fluid flow using flux-corrected transport.

1021 for beam stress analysis using conjugate gradients, 1020 for baffled surface wave simulation using explicit finite differences, and 1016 for unstable fluid flow using flux-corrected transport.

任务加速计算分析图如下

从上图中可知: 未加速前的时间 \(Time=s'+Np'\),加速后的时间为 \(Time=s'+p'\),因此可计算得到其加速比例如下

\[accRate(N) = \frac{s'+Np'}{s'+p1} = \frac{s'+Np'}{1} = s'+Np' \tag{2.2.1} \]

三、实际测试 Cuda加速图像处理 环境准备 基本代码编写 串并加速比例分析 加速比理论计算 实际时间测试验证 结论 Reference

Reference1: Reevaluating Amdahl's Law &&&& Reevaluating Amdahl's Law.PDF Reference2: 阿姆达尔定律



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3