并行计算
中的加速比是用并行前的执行速度和并行后的执行速度之比来表示的,它表示了在并行化以后的效率提高状况。
阿姆达尔定律是固定负载(计算总量不变时)时的量化标准。可用公式:
来表示。式中
分别表示问题规模的串行份量(问题中不能并行化的那一部分)和并行份量,p表示处理器数量。
Amdahl定律对多核处理器性能的影响
随着技术的发展,多核心处理器已成为现今处理器发展的潮流.提升处理器性能的方法有许多,其中主要有提升频率与增长核心数量等.提升频率在现有条件下已经比较困难且不经济,增长核心数量之路又能走多远.加速比是衡量系统性能提高的一个重要指标,Amdahl定律即是其中之一.在Amdahl定律的范围内(且不考虑包括通信开销等在内的并行开销),经过对单一核心提升频率和增长核心数量两个方面的讨论能够得出:在可并行执行部分的执行时间占总执行时间的比例f=0.5时,提升单一核心频率与增长核心所得加速比相同;当f<0.5时,提升单一核心频率可比增长核心数量得到更大加速比;当f>0.5时,增长核心数量得到的加速比更大些.所以,在核心数量增长到必定程度时,经过提升单一核心的频率可得到更高加速比,也多是更经济有效的方案。
在过去的不少年里,软件性能的提高很大程度上源自处理器速度的增加。软件工程师面对客户抱怨说软件运行得太慢的一般回答是:升级你的系统。
然而如今因为处理器速度逐渐逼近物理极限,继续提升处理器的时钟速度会致使发热量显著增长,甚至核心熔化。江郎才尽的硬件工程师想出了一个能保住本身饭碗的办法:既然不能提升单个核心的速度,那就在一个处理器里面封装多个核心。因而咱们进入了多核处理器的时代。
今天,随着多核处理器的发展,计算领域正在发生具备革命性影响的转变。
如今犯难的就是软件工程师了:没有了处理器速度不断提高的免费便车,接下来不得不面对的问题就是如何有效地利用处理器里面的多个核,也就是并行计算。
然而多核面对一个彷佛没法回避的难题:阿姆达尔定律(Amdahl's Law)。
阿姆达尔定律告诉咱们:系统中某一部件因为采用某种更快的执行方式后整个系统性能的提升与这种执行方式使用频率占总执行时间的比例有关。因为采用特殊的方法所能得到的加速比为:
在多核处理器中加速比是衡量并行程序性能的一个重要参数,定义为Speedup=使用单处理器执行时间/使用多处理器执行时间。根据阿姆达尔定律:
其中,s是系统中串行执行部分占整个系统的比例,n是多核处理器中核的数目。当s=5%时,8核的加速比为5.93倍,16核的加速比为9.14倍,与理想状态的8倍、16倍有不小的差距。当s=30%时,8核的加速比仅有2.58倍,16核的加速比仅有2.91倍,彻底没有发挥多核的优点。更加糟糕的是,实际状况每每比Amdahl定律给出的结果更差。考虑到核间交互带来的额外开销,核间同步影响整个系统的并发处理,设计糟糕的系统在多核下甚至比单核下的性能还要低得多。
当n趋近于无穷大时(即假设咱们有无穷多个核心),速度提高的上限是 1/s,即速度提高的上限取决于程序不能被并行计算的部分。
这个定律的结果就是,即使咱们可以有效地并行计算一个程序的95%,剩下 5%只能串行计算的部分限制了这个程序的运行速度最多能提高1/5%=20倍。而现有的程序中不多可以作到95%以上部分的并行计算。
并且,若是你想在一个并行、线程化的应用中使用不仅一个内核,就须要某种通讯/同步,并且,对于一个固定的工做负载,通讯/同步开销是做业所用 CPU 内核数量的单调递增函数。由此,咱们须要对阿姆达尔定律作些简单修改:
其中,T为解决某计算问题所需的总时间,Ts是完成串行工做所需的时间,Tp 是完成全部并行工做所需的时间,N是并行工做中所使用的处理器数量,To是每颗处理器的通讯与同步开销。T正是传统阿姆达尔定律公式中所没有的——随着处理器的增多,总开销也会增长。
在没有引入通讯/同步开销的传统标准模型中,总时间T就是处理器数N的一个单调递减函数,会逐渐接近于Ts。而在修改后的公式中,咱们很清楚地看到,因为存在通讯开销,随着处理器数N的增长,在达到某一临界点后,总时间T就会开始增长。所以,对于一个彻底并行的应用 (即Ts=0)来讲,其所需处理器的最优数量是:
所以,可否有效下降串行执行比例和下降交互开销决定了可否充分发挥多核的性能,其中的关键在于:合理划分任务、减小核间通讯。这正是当今多核处理器的发展趋势。