有些问题使用越多的资源就能越快地解决——越多的工人参与收割庄稼,那么就能越快地完成收获。另一些任务根本就是串行化的——增加更多的工人根本不可能提高收割速度。如果我们使用线程的重要原因之一是为了支配多处理器的能力,我们必须保证问题被恰当地进行了并行化的分解,并且我们的程序有效地使用了这种并行的潜能。
大多数并发程序都与农耕有着很多相似之处,由一系列并行和串行化的片断组成。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 串行访问任务队列
public class WorkerThread extends Thread {
private final BlockingQueue<Runnable> queue;
public WorkerThread(BlockingQueue<Runnable> queue) {
this.queue = queue;
}
public void run() {
while (true) {
try {
Runnable task = queue.take();
task.run();
} catch (InterruptedException e) {
break; /* 允许线程退出 */
}
}
}
}
个工作者线程共享,并且因此成为了同源的串行部分。如果不是每个线程各自维护自己的结果的数据结构,而是在所有任务都执行完成后合并所有的结果,这最终的合并就成为了一个串行源。
- 大小: 774 Bytes
- 大小: 17.2 KB
分享到:
相关推荐
"应用Amdahl定律对多核处理器性能的分析" Amdahl定律是由 Gene Amdahl 在1967年提出的,用于描述并行计算中的加速比问题。该定律表明,一个程序的加速比是由其可并行执行部分的执行时间占总执行时间的比例(f)决定...
文章着重分析了影响多核处理器性能的关键因素,并引入了密码并行处理特征、数据传输时间和同步时间等因素,以此为基础扩展了Amdahl定律。 Amdahl定律是计算机性能优化领域的一个基本理论,它指出在系统中,即使一...
Amdahl定律是计算机系统性能优化的一个基本概念,由Gustaf Amdahl提出,用于描述在并行处理系统中,提升系统整体性能的理论上限。该定律指出,当一个程序的一部分可以并行化执行而其余部分仍需串行执行时,系统性能...
Amdahl定律是计算机性能优化中的一个基础理论,它指出在并行计算环境中,系统性能的提升受到串行部分的影响。该定律表达了一个公式,即系统整体加速比等于串行部分速度提升的比例除以系统的并行化比例加上串行部分未...
在IT领域,尤其是在并行计算和系统性能优化中,Amdahl定律和Gustafson定律是两个重要的理论概念。这两个定律是用来分析多处理器系统中并行化对整体性能提升的影响。 首先,Amdahl定律是由Gene Amdahl提出的一个理论...
### Amdahl定律与Gustafson定律在多核系统预测中的应用及争议 #### 摘要 本文探讨了Amdahl定律在预测多核系统未来趋势或识别可扩展性瓶颈时存在的问题,并提出了使用Gustafson定律作为替代方案的可能性。通过对称...
方法2和方法3利用Amdahl定律,分别计算可加速部分的比例和加速比,然后结合Amdahl定律求解。 4. **错误理解和计算误区**: - 计算加速比时可能会将`Tn/T0`误写为`T0/Tn`。 - 误将部件A和部件B加速后的运行时间...
本资源摘要信息涵盖了并行多核体系结构基础的课后习题,涉及到工艺技术升级、设计权衡、功率管理和Amdahl定律等多个方面。以下是对每个习题的详细知识点解释: 1. 工艺技术升级 在工艺技术升级过程中,为了保持...
在本题中提到的“CPU性能公式”可能指的是Amdahl定律,它描述了系统性能改进的极限。Amdahl定律指出,如果一个系统的某个部分被加速,整体性能的提升受到未改进部分比例的限制。公式为:加速比 = 1 / (未改进部分...
在第一章中,我们关注的是计算机体系结构的基本概念,包括CPU性能指标、性能提升方法以及Amdahl定律的应用。 首先,了解CPU性能指标是至关重要的。有效CPI(Cycle Per Instruction)是指每执行一条指令所需的平均...
首先,重点介绍了Amdahl定律,这是计算机性能优化中的一个关键概念。Amdahl定律说明了在系统中改善某个部分性能所能带来的整体加速比。公式为 Sn = (1 - Fe) + Fe * Se,其中Sn表示全局加速比,To是原始执行时间,Tn...
通过以上知识点的总结,我们不仅理解了计算机系统中透明性概念的重要性,还掌握了如何使用Amdahl定律评估性能提升的可能性,并且能够深入分析不同浮点数格式下的性能指标。这些内容都是系统结构课程中的核心知识点,...
《计算机系统结构》总复习中的核心知识点主要集中在计算机性能的定性和定量评价上,包括Amdahl定律、CPI(每条指令周期数)以及MIPS(每秒百万指令数)和MFLOPS(每秒百万浮点运算次数)等概念。这些是理解和评估...
- 当某个功能的处理速度提高,但仅占系统运行时间的一部分时,整体性能的提升可以通过Amdahl定律计算。 4. 多部件改良情况下的系统加速比: - 当有多个部件可以改良时,系统加速比的计算需考虑所有部件的改良比例...
在2018年的这门习题课中,吴非教授探讨了多个关键概念,包括性能指标、流水线设计以及Amdahl定律。 1. **性能指标** - **CPU时间**:计算CPU执行程序所需时间的关键公式是CPU时间 = IC × CPI × 时钟周期时间,...
总结来说,本作业涵盖了系统性能分析的关键概念,如CPI的计算、Amdahl定律的应用以及多部件改进策略对系统性能的影响。这些知识点在理解和优化计算机系统性能时至关重要。通过理解和应用这些原理,我们可以设计出更...
本文将深入探讨并行计算的基本性能指标、Amdahl定律、Gustafson定律以及Sun-Ni定理,并分析相关的存储器性能、并行与通信开销。 首先,我们需要理解并行机的一些基本性能指标。这些指标包括加速比、可扩放性和效率...
在上述复习题中,主要涉及了几个关键概念和计算方法,包括Amdahl定律、指令执行时间的分析以及Tomasulo算法。 首先,Amdahl定律是评估系统性能提升的重要理论。它指出,如果一个系统的某一部分被加速了,但其他部分...
在本讲中,我们将探讨不同的并行计算机模型,计算性能指标,以及Amdahl定律和Gustafson定律的影响。 1. **并行计算机模型** - **共享内存模型**:所有处理器共享同一内存空间,通过缓存一致性机制进行通信。优点是...