Amdahl定律

一.介绍

Amdahl(Amdahl)定律是计算机科学中非常重要的定律,他定义了串行系统并行化后加速比的计算公式和理论上限。

加速比定义: 加速比= 优化前系统消耗/ 优化后系统消耗

所谓的加速比,就是优化前的消耗与优化后的消耗的比值。优化比越高,就说明优化效果越明显。

Amdahl定律给出了加速比与系统并行度和处理器数量的关系。设加速比为speedup,系统内必须串行化的程序比重为F,CPU处理器数量为N,则有:speedup<= 1/(F+(1-F)/N)

根据这个公式,如果说CPU处理器的数量趋向于无穷大,那么加速比与系统的串行化比率成反比,如果系统中必须有50%的代码串行执行,那么系统的最大加速比为2。

二.案例

假设有一段程序我们将它分成5个步骤,然后每个步骤需要100个时间单位,其中只有步骤二与步骤五可以并行,步骤一三四必须串行,在全部串行的情况下需要消耗500个时间单位。

如果我们将步骤二与步骤五并行化,假设我们在双核处理器上,步骤二与步骤五耗时将变成50个时间单位,这时候系统的合计耗时是400个时间单位。如图:

这时候我们算出的加速比就是:

加速比=优化前系统耗时/优化后系统耗时=500/400=1.25

我们也可以利用加速比的公式来计算,由于5个步骤中有3个步骤是必须要串行的,因此串行化的比重就是3/5=0.6,也就是F=0.6,且双核处理器个数N为2,公式:

加速比=1/(0.6+(1-0.6)/2)=1.25

在极端的情况下,假设并行处理器的个数是无穷大的,步骤二与 步骤五的处理时间趋向于0,即使是这样,系统整体的消耗时间依然大于300个时间单位。即加速比的极限为500/300= 1.67 。

使用加速比计算公式来算,N是无穷大的,有speedup= 1/F,且F= 0.6,所以算出来 speedup= 1.67 。

由此可见,为了提供系统的速度,仅仅增加cpu处理器的数量并不一定能起到有效的作用,需要从根本上修改程序个串行行为,提高程序中并行化的模块比重,在此基础上,合理增加并行处理器的数量,才能以最小的投入,得到最大的加速化。

根据Amdahl 定律,使用多核cpu对系统进行优化,优化的效果取决于cpu的数量以及系统中的串行化程序的比重,cpu数量越多,串行化的比重越低,效果是越好的。如果仅仅提高cpu数量而不降低程序的串行化比重,也无法提供系统性能。

参考:《java程序性能优化》

### Amdahl 定律的定义和核心概念 Amdahl定律描述了通过优化或加速计算机系统的一部分所能获得的整体性能提升限度。具体来说,如果只有一部分程序被加速,则整体速度增益受限于未被加速的部分所占的比例[^3]。 #### 数学表达式 假设 \( S \) 表示程序执行时间相对于原始版本的最大可能加速倍数;\( f \) 是可以通过改进措施得到加速的那一部分工作量占比(0≤f<1),其余 (1-f) 的部分无法受益于这种特定类型的优化。那么根据Amdahl定律: \[ S_{\text{max}} = \frac{1}{(1 - f) + \frac{f}{S_p}} \] 其中 \( S_p \) 代表可并行化部分的实际加速因子。当 \( f=0 \),即没有任何部分能够被加速时,最大理论加速比等于1;反之,即使存在无限大的 \( S_p \),只要还有不可忽略的工作负载未能受益于此种形式下的提速方案,最终取得的效果也会受到限制。 此公式强调了一个重要的事实:为了显著改善整个系统的效率,必须关注那些占用大量时间和资源的关键路径上的操作,并尽可能减少串行处理阶段的时间消耗。 #### 实际应用场景 在实际应用中,Amdahl定律提醒开发者们,在追求高性能计算的过程中,不仅要考虑如何有效地利用多核或多处理器架构带来的潜力,还要重视算法设计本身是否存在瓶颈环节。例如,在构建大规模机器学习平台时,除了增加GPU数量外,还需要审视数据预处理流程、特征工程步骤等方面是否有进一步精简的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

$码出未来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值