可伸缩性与加速比
可伸缩性是衡量应用程序加速比多少的尺度之一(注:加速比指应用程序串行化与并行化之间所花费时间之比,它表示并行化之后的效率提升结果)。2 倍的加速比表明并行程序仅需要花费串行程序的一半时间。比如理想情况下,运行在单处理器上的程序花费 30 秒,而在双核机器上运行仅需花费 15 秒。
我们总是期望运行在双核机器上的应用程序要比在单核上快的多。同理,运行在四核机器上也要比在双核上快的多。这就好像以前当 CPU 换代升级时,随着主频提升,我们的程序总是可以运行的更快。很不幸,大多数应用程序在步入多核时代后,性能不但没有提升,甚至有所降低。
假如我们增加更多的处理器核心数,而应用程序并没有获得额外的加速。从这点来看,该应用程序不具有可伸缩性。如果强制使用另外的处理器核心,通常会造成性能下降。因为这时分布式和同步的开销开始凸显威力。
更多关于可伸缩性的指导方针,楼主强烈推荐这篇文章:可伸缩性原则。
应用程序到底有多少并行性可言?
如小标题所说,应用程序到底有多少并行性呢?答案是视情况而定(废话)。
显然,这个问题取决于解决问题的多寡和发现并恰当利用并行算法的能力。我们先前大部分讨论(更多讨论请参见:并行思维 [I])都围绕着如何在昂贵和稀有的并行计算机上编写高性能程序。随着多核处理器时代的到来,许多方面已经发生变化。我们需要退一步来重新审视一下。
Amdahl 定律
Gene Amdahl 发现在计算机体系架构设计过程中,某个部件的优化对整个架构的优化和改善是有上限的。这个发现后来成为知名的 Amdahl 定律。该定律告诉我们,假如我们以 2 倍加速程序的全部,那我们可以预期程序运行的比 2 倍更快。但是,假如我们只以 2 倍加速优化程序的一半,那么整个系统只改善了 1.33 倍。Amdahl 定律很容易可视化表达。设想有个程序由 5 个相同的部分组成,且每个部分运行时间均花费 100 秒,如图 1 所示:
图 1