大数跨境
0
0

阿姆达尔定律

阿姆达尔定律 Social Companion
2019-12-08
0
导读:阿姆达尔定律是一个计算机科学界的经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名。吉恩·阿姆达尔

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

  以计算机架构师吉恩·阿姆达尔的名字命名的定律,用于寻找仅对系统的一部分进行改进时整个系统预期得到的最大改进。换言之,该定律要讨论的是为什么增加某些东西并不总能带来能力的翻番。该定律可应用在计算机行业,比如研究CPU的核数与性能的关系;在高性能计算领域,该定律可以解释为什么增加节点并不能带来性能的线性改善。

阿姆达尔定律证明

Speedup(due to EnhanceMent E) =ExcuteTime(without E)/ExcuteTime(With E) = Performance(With E)/Performanc(WithoutE)

Suppose the enhancement E accelerates afraction P of one task by a factor S and the remainder of the task unaffectedthen:

ExcuteTime(With E) = {(1-P) + P/S} *ExcuteTime(Without E);

Speedup(E) = 1/{(1-P)+P/S};

  以上就是Amdahl's law证明。

Amdahl's law主要的用途是指出了在计算机体系结构设计过程中,某个部件的优化对整个结构的优化帮助是有上限的,这个极限就是当S→∞时,speedup(E) = 1/(1-P);也从另外一个方面说明了在体系结构的优化设计过程中,应该挑选对整体有重大影响的部件来进行优化,以得到更好的结果。

二、Amdahl定律的应用

    提高处理机的性能:

    1、增加处理机的核心个数

    改进后系统的加速比:1/[(1-f)+f/n]

    其中f为系统可并行执行部分的执行时间占总系统执行时间的百分比

    n为处理器核心的增加倍数。而1-f则为串行部分部分的执行时间所占百分比。

    2、提高处理机单一核心的频率

    在这种情况之下,我们仅仅提高其中一个核心的频率,而其他核心保持不变。上式中n变为核心的频率提高倍数。

    而当f>0.5,我们发现只有增加核心的个数才能有效的提高处理器的性能。

    当f<0.5时,采用第二种办法,即提高单一核心的频率才能有效提高性能。

    三、多核处理器

    日常使用的最最基本的程序——操作系统——是支持并行处理的,所以,当在多核处理器上同时运行多个单线程程序的时候,操作系统会把多个程序的指令分别发送给多个核心,从而使得同时完成多个程序的速度大大加快。另外,虽然单一的单线程程序无法体现出多核处理器的优势,但是多核处理器依然为程序设计者提供了一个很好的平台,使得他们可以通过对原有的单线程序进行并行设计优化,以实现更好的程序运行效果。虽然多核处理器可以高效解决我们现代化生活中的许多问题,可编程性是多核处理器面临的最大问题。一旦核心多过八个,就需要执行程序能够并行处理。尽管在并行计算上,人类已经探索了超过40年,但编写、调试、优化并行处理程序的能力还非常弱。多核处理器的出现增加了并行的层次性能使得并行程序的开发比以往更难。然而当前业内并无有效的并行计算解决方案,无论是编程模型、开发语言还是开发工具,距离开发者的期望都有很大的差距。自动的并行化解决方案在过去的30年间已经被证明基本是死胡同,但传统的手工式的并行程序开发方式又难以为普通的程序员所掌握。Intel、微软、SUN、Cray等业内巨头正投入大量人力物力进行相关的研究,但真正成熟的产品在短期内很难出现。可扩展性是云计算时代并行计算的主要考量点之一,应用性能必须能随着用户的请求、系统规模的增大有效的扩展。



【声明】内容源于网络
0
0
Social Companion
信息科技教学,个人思考随感的在线记事本
内容 791
粉丝 0
Social Companion 信息科技教学,个人思考随感的在线记事本
总阅读12
粉丝0
内容791