`

Amdahl 定律 (阿姆达尔定律)

 
阅读更多

有些问题使用越多的资源就能越快地解决——越多的工人参与收割庄稼,那么就能越快地完成收获。另一些任务根本就是串行化的——增加更多的工人根本不可能提高收割速度。如果我们使用线程的重要原因之一是为了支配多处理器的能力,我们必须保证问题被恰当地进行了并行化的分解,并且我们的程序有效地使用了这种并行的潜能。

大多数并发程序都与农耕有着很多相似之处,由一系列并行和串行化的片断组成。Amdahl定律描述了在一个系统中,基于可并行化和串行化的组件各自所占的比重,程序通过获得额外的计算资源,理论上能够加速多少。如果F是必须串行化执行的比重,那么Amdahl定律告诉我们,在一个N 处理器的机器中,我们最多可以加速:

N 无限增大趋近无穷时,speedup 的最大值无限趋近1/F ,这意味着一个程序中如果50%的处理都需要串行进行的话,speedup 只能提升2倍(不考虑事实上有多少线程可用);如果程序的10%需要串行进行,speedup 最多能够提高近10倍。Amdahl定律同样量化了串行化的效率开销。在拥有10个处理器的系统中,程序如果有10%是串行化的,那么最多可以加速5.3倍(53%的使用率),在拥有100个处理器的系统中,这个数字可以达到9.2(9%的使用率)。这使得无效的CPU利用永远不可能到达10倍。

图11.1展示了随着串行执行和处理器数量变化,处理器最大限度的利用率的曲线。随着处理器数量的增加,我们很明显地看到,即使串行化执行的程度发生细微的百分比变化,都会大大限制吞吐量随计算资源增加。

第6章探究了如何识别逻辑边界,从而把应用程序分解为不同的任务。但是为了在多处理器系统中预知你的程序是否存在加速的可能性,你同样需要识别你的任务中串行的部分。

 

图11.1  Amdahl定律中不同串行化的百分比,带来的最大的效能

清单11.1中,假设应用程序中N 个线程正在执行doWork,从一个共享的工作队列中取出任务,并处理;假设这里的任务并不依赖其他任务的结果或边界效应。忽略任务进行队列操作的时间,如果我们增加处理器,应用程序会随之发生什么样的改进呢?乍看这个程序可能完全由并行任务组成,并不会相互等待,那么处理器越多,更多的任务就越可能并发处理。然而,其中也包含串行组件——从队列中获取任务。所有工作者线程都共享工作队列,因此它会需要一些同步机制,从而在并发访问中保持完整性。如果通过加锁来守卫队列状态,那么当一个线程从队列中取出任务的时候,其他线程想要取得下一个任务就必须等待——这便是任务处理中串行的部分。

单个任务的处理时间不仅包括执行任务Runnable的时间,也包括从共享队列中取出任务的时间。如果工作队列是LinkedBlockingQueue类型的,这个取出的操作被阻塞的可能性小于使用同步的LinkedList的阻塞可能,这是因为LinkedBlockingQueue使用了更具伸缩性的算法,但是访问所有共享的数据结构,本质上都会向程序引入一个串行的元素。

这个例子同样忽略了另一个的相同的串行源(source of serialization):结果处理。所有有用的计算都产生一些结果集或者边界效应——如果不是,它们可以当作死代码(dead code)被遗弃掉。因为Runnable没有提供明确的结果处理,这些任务必须具有一些边界效应,设定把它们的结果写入日志还是存入一个数据结构。日志文件和结果容器通常由多

清单11.1  串行访问任务队列

 

Java代码  收藏代码
  1. public class WorkerThread extends Thread {  
  2. private final BlockingQueue<Runnable> queue;  
  3. public WorkerThread(BlockingQueue<Runnable> queue) {  
  4. this.queue = queue;  
  5. }  
  6. public void run() {  
  7. while (true) {  
  8. try {  
  9. Runnable task = queue.take();  
  10. task.run();  
  11. catch (InterruptedException e) {  
  12. break/* 允许线程退出 */  
  13. }  
  14. }  
  15. }  
  16. }   
 

个工作者线程共享,并且因此成为了同源的串行部分。如果不是每个线程各自维护自己的结果的数据结构,而是在所有任务都执行完成后合并所有的结果,这最终的合并就成为了一个串行源。

分享到:
评论

相关推荐

    amdahls-law:阿姆达尔定律计算器

    阿姆达尔定律(Amdahl's Law)是计算机性能优化领域的一个重要理论,由Gene Amdahl在1967年提出。这个定律主要用于描述在系统改进或升级时,整体性能提升的理论上限。它表明,即使部分组件的性能得到显著提高,如果...

    计算机三定律总结.pdf

    6. **阿姆达尔定律**(Amdahl's law):由 Gene Amdahl 提出,用于计算系统性能改进的理论上限。定律表明,即使系统中有部分可以并行化,但受限于不能并行化的部分,整体性能提升有限。 7. **古斯塔夫定律**...

    多核心处理器到底快在哪里?.pdf

    阿姆达尔定律指出,如果一个任务可以被分解成可并行计算和不可并行计算两部分,那么增加处理核心的数量并不能线性地提高整体运行效率。计算公式为 (W_s + W_p) / (W_s + W_p/n),其中W_s是串行部分,W_p是并行部分,...

    amdahl's law in the multicore

    本文旨在深入探讨Amdahl's Law(阿姆达尔定律)在多核架构中的应用及其对计算性能的影响。通过分析不同类型的处理器核心(包括对称核心、非对称核心以及动态协作技术),我们揭示了在进入多核时代后,如何优化程序...

    Computer Architecture - A Quantitative Approach(6th)

    阿姆达尔定律指出,如果程序中的一部分只能被优化,而剩余部分无法被优化,那么整个程序的最大可能提速受限于无法优化部分所占的比例。公式表示为“Speedup overall = Execution time old / Execution time new = 1 ...

    Software-Hardware Evolution and birth of Multicore Processors_软硬

    与此同时,阿姆达尔定律(Amdahl's Law)和迈尔霍尔德定律(Myhrvold's Law)揭示了系统性能提升的局限性和潜在收益。阿姆达尔定律指出,即使系统中有部分可以并行化,但系统的总体性能仍然受限于不可并行部分的性能...

    Parallel.Programming.in.C.with.Mpi.and.Openmp

    **阿姆达尔定律 (Amdahl's Law)** 阿姆达尔定律描述了在一个部分可并行化的程序中,无论有多少处理器,程序的加速比总是受限于其中不可并行的部分。具体而言,如果一个程序中有一部分必须顺序执行(用f表示这一比例...

    Java and the Machine-Martijn

    - **阿姆达尔定律** (Amdahl's Law): 阿姆达尔定律揭示了并行化带来的性能提升的极限。如果某个算法的一部分可以被加速(假设为P),且加速倍数为S,则该算法的最大加速比由公式\[ \frac{1}{(1-P)+\frac{P}{S}} \]给...

    Ehcache最新版本的UserGuide

    阿姆达尔定律(Amdahl's Law)可用于估算应用程序在采用缓存后可能获得的性能提升比例。具体而言,它指出最大速度提升取决于非缓存部分的执行时间占比。 ##### 2.4.3 缓存效率 缓存效率是指缓存中数据的命中率,即...

    中科曙光HPC培训教程汇总:D29-并行编程—OpenMP程序设计.pptx

    2. **阿姆达尔定律(Amdahl’s Law)**:它描述了系统中串行部分对整体性能的影响。当并行化的比例增加时,性能加速比随之上升,但最终会趋近于一个极限,因为无法并行的部分限制了整体的加速效果。 3. **...

    藏经阁-云平台性能优化-七牛-李玮.pdf

    3. 谨遵阿姆达尔定律(Amdahl‘s law). 二、监控分析优化体系 监控分析优化体系是云平台性能优化的核心组件。该体系包括监控、分析和优化三个部分。监控是指对系统和应用的性能进行实时监控,分析是指对监控...

    计算机体系结构:review-mid-term.pdf

    性能提升的计算可以通过Amdahl's Law(阿姆达尔定律)来理解,该定律指出系统中某部分的改进对整体性能的影响受限于该部分在整个系统中所占的比例。CPU时间的计算涉及到CPI(每条指令周期数)、IC(指令计数)和CCT...

    Parallel Computation.pdf

    对于并行算法和并行机器的限制,主要集中在阿姆达尔定律(Amdahl's Law)以及古斯塔夫森定律(Gustafson's Law)上。阿姆达尔定律指出,程序可并行化的部分决定了程序的最大加速比,因为程序中总是存在无法并行化的...

    武汉大学计算机学院计算机组织与体系结构2016年期末试题A

    5. **并行程序性能定律**:衡量程序并行后性能改进的核心定律是阿姆达尔定律(Amdahl's Law)。该定律指出,程序中可并行部分的速度提升比例只会在总体性能提升中占一定比例,这个比例等于可并行部分的比例除以(1 -...

    计算机系统结构模拟试题二

    阿姆达尔(Amdahl)定律是性能优化的一个基本理论,它指出,如果只优化系统的一部分,随着优化比例的增加,整体性能提升的效果会逐渐减弱。这意味着为了获得显著的性能提升,需要对整个系统进行全面优化,而不是仅仅...

    Java Concurrency in Practice

    摩尔定律(Moore's Law)驱动了过去数十年的计算机性能增长,但未来性能的提升将更多依赖于阿姆达尔定律(Amdahl's Law),即通过并发编程来更有效地利用多处理器。 本书是每一位编写、设计、调试、维护或正在考虑...

    Java企业应用-性能优化原则, 方法与策略.pdf

    5. **阿姆达尔定律**(Amdahl's Law) - 描述了并行计算中,串行部分对整体加速比的影响。减少串行工作量能提高系统性能,但随着线程数量(N)增加,也会带来额外的成本,如线程上下文切换。 6. **性能分析工具** ...

    并行计算期末考试准备1

    根据阿姆达尔定律(Amdahl's Law),最大加速比pS=1/(1-a+a/n)受并行化部分的比例a和并行处理节点数n的影响。如果a为0,表示所有计算都可以并行,那么最大加速比为n;反之,如果a接近1,表示大部分计算无法并行,...

    Tips for Optimizing C/C++ Code

    首先,要记住阿姆达尔定律(Amdahl's Law)。这个定律用来预测系统或程序经过优化后可以获得的最大加速比。它表明,程序的整体加速比受限于它最慢的部分,即优化只能提高程序的一部分性能。例如,如果一个函数占用了...

Global site tag (gtag.js) - Google Analytics