真的没有免费的午餐了吗?多核系统的可扩展性:系列白皮书之第一篇

间隙填充
正睿科技  发布时间:2008-07-22 13:55:05  浏览数:2803

过去,大多数软件开发人员提升应用性能的传统捷径就是静静等待下一代处理器的推出,这样他们无需进行性能优化,就能享用硬件改进带来的“免费午餐”。 然而,随着业界转而采用多核系统,这一局面也随之改变:由于现在应用性能需要实现同步优化,因此开发人员在设计应用程序时,必须使其性能可以随着内核数量的增加而扩展。作为本系列白皮书的开篇之首,本文将重点预测可扩展性并提出问题:并行可扩展性或否成为新的免费午餐?

1. 简介

在“串行编码时代”(计算机演进的历史性阶段),硬件平台围绕着单核处理器而构建。经验丰富的开发人员注意到,每次新一代处理器的发布,都会或多或少地带动硬件程序性能的提升。博主 Joel Spolsky 在他的博客中坦言:

 感谢不断下调的内存价格和每年翻番的CPU 速度,让我们这些程序员有了偷懒的机会。不论您是花上半年的时间辛辛苦苦去改写汇编程序的内部循环,还是在摇滚乐队潇潇洒洒地做半年的鼓手。只要有下一代处理器的存在,您程序的运行速度都能有所提升。只不过,汇编程序员不能像帅气的鼓手那样,赢得众多少女粉丝的疯狂追捧。

 因此,我们不再担心程序的性能或优化。

 尽管这一讯息的发布时机错误(2007 年秋季,串行编码时代真正结束),但它准确阐述了当前的实情??只需静待一些时日后新一代处理器的出现,开发人员就能免费提升程序性能。

 作为 Dr Dobbs 的 C++ 大师 和当前的并发大师,Herb Sutter在其2005 (!) 论文《免费午餐已经结束》中,已经提醒了我们免费午餐即将结束。出于包括半导体物理在内的诸多合理原因,芯片设计已经向多核方向转变,单核性能提升幅度将大不如从前。在此情况下,程序的性能仍然可以实现提升,但前提是:软件必须针对并发设计和执行。

 正如 Sutter 以及其他人指出的那样,在软件开发过程中,并发是相当棘手的问题。很少有开发人员能够做得顺手,因为传统的编程模式并不注重并发,而且并发适用的执行机制线程也充满了危险(争用条件)。其中的一大挑战便是可扩展性:添加内核后,应用应该如何执行?我们将在本系列白皮书中,全方面探讨可扩展性问题。

2.预测可扩展性

术语“可扩展性”在 Werner Vogels 的博客中给出了详尽而准确的定义:

当我们增加系统资源时,系统性能会成比例提升的一项可扩展服务。

该概念的适用范围非常广泛。可扩展性是数据中心的重点考虑因素,例如预测添加更多服务器或执行虚拟化带来的影响等。本文中,我们仅狭义地关注 CPU 内核资源的增加,并讨论内容限制的线程执行模式。

Sutter 还提醒我们:“内核”不仅是执行资源,还可以当作内存资源。鉴于当前所有软件设计中都有本地高速缓存,我们将在第三章阐述内核在这两个方面的扩展考虑因素。

2.1 形势严峻(阿姆达尔是一位乐观主义者)

说到可扩展性,几乎每次都必然要从“阿姆定律”说起。下列等式表明:串行代码不是并行代码(或反之),您不能通过添加更多内核的方式来加速串行代码。该等式的常见表达式为:

加速值作为处理单元数量函数 p,取决于代码串行部分 s 的值以及可并行部分 (1-s) 的值。例如,假设一个代码 90% 可并行(则 s = 0.1),在 8 枚内核上运行(则 p = 8),那么加速值为 4.7。该数值就是在此情形中可以实现的最大可能的加速值。图 1 以图表的形式形象说明了该结果以及串行比例更大的代码的结果。图中,蓝色斜线表示完美的可扩展,s = 0,其它情形中加速值都要略低。

图 1-1 中结果反映了中等系统(多达 8 核)的可扩展预测趋势。那么多核系统又将怎样呢,我们能否采用一个更有利的代码可并行部分呢?请参阅图 1-2 (摘自 Wikipedia),图中显示的情况并不乐观:无论内核数量多寡,即使代码 95% 实现并行,加速值也无法超出 20。

 图 1-1:阿姆达尔定律 8 核不同并行比例的曲线图。

Maximum Theoretical Speedup from Amdahl’s Law

阿姆达尔定律的最佳理论加速值

Speedup

加速值

Number of cores

内核数量

% serial = 0

串行% = 0

图 1-2:阿姆阿达尔定律 216 内核不同并行比例的曲线图。

Amdahl’s Law

阿姆达尔定律

Speedup

加速值

Number of Processors

处理器数量

Parallel Portion

并行%

除了这些标准教科书上提出的考虑因素外,现实中的情形可能会更糟:阿姆达尔的理想表达式中忽略了线程创建开销、同步和通信带来的性能下降,因此在这些图表中即使达到了兆级扩展也无法实现理想的“执行”。因此,我们只能寄希望于并行应用,尤其是在数量庞大的内核上高效执行并行应用。

2.2 再评阿姆达尔定律(小心隐性假设)

早在 1998 年,John Gustafson 便指出了阿姆达尔定律的主要缺陷:它假定问题大小增加时,计算工作负载或者串行和并行比例扩展是固定不变的。

替代方案,通常称为 Scaled Speedup,不再考虑一定时间段内问题大小的增加,其表达式如下:

换言之,一定数量处理器 p 的加速值是该数值 p 加上串行运行 s 上消耗的并行代码部分(1-p)。这与阿姆达尔定律有细微区别:s 表示应用在 p 处理器上运行时的串行工作。

开发人员从查看特定案例的扩展数值中得到了启发。假设一个应用在 64 枚内核上运行,时间经测量为 220 秒,其中 11 秒定义(如通过设置文件)专门用于串行执行。在 Scaled Speedup 公式中代入这些数值,得出:

这就是说,应用在 64 枚内核上运行时加速值接近 61。如果将相同的串行时间值 0.05 套入阿姆达尔定律,该等式预测的应用在 64 枚内核上的加速值仅为 15。

尽管与阿姆达尔定律一样理想化,但 Scaled Speedup 模式戏剧性地揭露了一个有关可扩展性的更乐观的前景。

3. 结论

综上所述,我们才刚刚起步:综上所述,我们的工作只是刚刚起步:阿姆达尔定律不能代表一切,并行可扩展性在多数情况中都可能实现。

在一款完全可扩展的应用中,内核数量翻番将促使该应用的性能提升近一倍。因此,用户目前对可扩展性的投资也将随着硬件内核数量的增加获得“免费的”提升。那时,资深开发人员自然就有充足的休息时间了……您知道哪家乐队需要鼓手吗?

在下一篇文章中,我们将论述制约可扩展性的因素以及如何减少这些因素的办法。

4. 参考资料

Joel on Software, http://www.joelonsoftware.com/items/2007/09/18.html

Herb Sutter,《免费午餐已经结束?软件历史性地向并发靠拢》,Dr. Dobb's Journal,30(3),2005 年 3 月期刊,广泛再版

Werner Vogels,《论可扩展性(A Word on Scalability)》,《传播一切(All Things Distributed)》博客,http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html

Herb Sutter,《Super Linearity and the Bigger Machine》,Dr. Dobb’s Portal,2008 年 3 月 12 日门户网站,http://www.ddj.com/architect/206903306

John Gustafson,《再评阿姆达尔定律(Reevaluating Amdahl’s Law)》,《ACM 通信》31(5),1988,http://www.scl.ameslab.gov/Publications/Gus/AmdahlsLaw/Amdahls.html转载

作者简介

Michael Wrinn 是英特尔® 软件学院的一名高级课程开发师,与高校协作促使并行计算成为大学生教育主流课程。此前,他曾在上海管理英特尔的软件工程实验室,指导人机界面技术研究实验室。他曾是制作首项 OpenMP 规范的委员会的英特尔代表,目前主要活跃于并行计算社区。加盟英特尔之前,Michael 在美国圣地亚哥 Accelrys 工作,负责在多种并行/HPC 系统上运行商业化和研究模拟代码。他拥有麦吉尔大学的博士学位(量子力学)和理学士学位(数学/化学/物理)。

原文请参见: http://softwarecommunity.intel.com/articles/eng/3809.htm