真的没有免费的午餐了吗?多核系统的可扩展性:系列白皮书之第一篇2
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。