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程序性能优化》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

$码出未来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值