介绍
Amdahl’s law(阿姆达尔定律) 由计算机科学家 Gene Amdahl 在 1967 年提出,旨在用公式描述在并行计算中,多核处理器理论上能够提高多少倍速度,公式如下:
前置说明
Fraction enhanced
Fraction enhanced 顾名思义是部分提高。例如我的程序总共有 100 行代码,其中 50 行是可以通过并行计算的,那么这 50 行代码就是 Fraction enhanced 。但是实际上 Fraction enhanced 是一个比例数值,是并行计算代码 / 总代码量。
例如上面的例子,
Speedup enhanced
如上面公式所得,Speedup enhanced 等于 原有运行时间 / 并行计算加速后的时间 。例如系统原来串行计算需要 6 秒,加速后只需要 3 秒,那么
带入 Amdahl’s law
我们分别把 Fraction enhanced 和 Speedup enhanced 带入 Amdahl’s law。Fraction enhanced 对应公式中的
Speedup enhanced 为什么可以代替
这里大家可能有一点疑问,Speedup enhanced 明明是 未加速前时间 / 加速后的时间,为什么就可以代表并行节点处理个数。在理论上,单核处理器处理一个任务需要 100 秒,那么双核处理它应该需要 50 秒。时间上它提速了 2 倍, cpu 个数上它也提升了 2 倍,故两个可以替换。
带入后公示得:
证明
为我们所需要的结果,全局提速倍速 (原来系统执行总时间)为 (加速后系统执行总时间)为- 系统中并行代码块(指能够通过并行计算加速的代码块)原来执行时间为
- 系统中并行代码块(指能够通过并行计算加速的代码块)加速后执行时间为
- 系统中串行代码块(指不能通过并行计算加速的代码块)执行时间为
为 为
带入公式得:
证明完毕!
总结
让我们回到最初的公式
由此我们可知,在并行系统中一味的增加运算资源,并不能永远成倍的提升系统整体性能。
参考资料
Computer Organization | Amdahl’s law and its proof
原创文章,作者:Smith,如若转载,请注明出处:https://www.inlighting.org/archives/amdahls-law-and-its-proof
评论列表(2条)
你好,请教一下,文章中的公式是如何正常显示的?
@Genson:用的 mathjax 的 js 插件