中篇将讨论多核处理器在短期内需要解决的一些问题,如功耗问题、单/多线程性能矛盾、最优核心数量等,为此,作者还对传统的Amdahl 定律进行了适当修改。此外,文章还从技术和市场的角度对多核芯片与RISC SMP进行了比较,作者认为这二者之间存在一定的相似性,而且,64位多核处理器对RISC市场构成了挑战。
1)功耗问题也很复杂
跟性能一样,功耗问题也会比你想象的要复杂得多,同样会涉及多个方面。在基于高性能处理器的计算机系统环境中,“功耗”问题可能意味着以下任何一种情况:
通过众多超细针脚/焊点传送到芯片的大量电流。(注意:即使在同样的功耗水平下,随着电压下降,电流上升,针脚/焊点内的热阻也将升高。)
消除大量热量,以防止Die温度超过阈值,明显缩短产品寿命。
“热点”问题:芯片局部区域中的功耗密度过高可能将导致局部故障。(注意:若为了保持同样的功耗水平,将晶圆上的处理器内核尺寸减少一半,同时提高频率,则内核中的功耗密度将提高一倍。)
为提供计算服务,需要为系统设备提供大量电力??包括电力成本和用电升级成本。
消除放置服务器所需基础设施所产生的大量热量??包括电力成本和机房冷却系统升级成本。
消除处理器芯片造成的大量热空气,以免影响其他热敏组件(如内存、硬盘等)。
由此可以看出,功耗问题实际上至少与5、6个相关而性质截然不同的技术问题和经济问题有关。
2)单线程性能和多线程性能的矛盾
下面,我们需要进一步探讨的是,如何在保持功耗水平不变的情况下,通过多核心设计来提高CPU的吞吐量和性能。我们知道,在假定其他条件不变的情况下,功耗往往是以CPU主频的平方倍或立方倍增长的,而性能提升却要低于主频的线性增长速度。可见,在主频发展到一定程度,试图继续通过提升主频来提高每瓦特性能的做法会越来越难以凑效。
多核为我们提供了一种新的方法。对于那些可以充分利用多线程的应用负载来说,多核可以极大地提高CPU的每瓦特吞吐量。但是,多核也存在缺陷,就象我们前文讨论过的,这种吞吐量的提升是以牺牲单线程性能为代价的。
为了在一颗芯片上放入更多的内核,一方面,我们可以不断改进平版印刷工艺,以把更多的当前内核放进去,另一种方法就是设计尺寸更小、也更节能的新内核。但问题在于,过去数年来,我们把单线程看得太重要了,使得后一种方法并没得到大规模使用(除了SUN的TI处理器外)。
通过上文的性能模型分析表明,只要我们能够保证CPU内核的功耗下降速度快于峰值吞吐量的下降速度,我们就能够通过无数个高效率的微小核心来获得最优的吞吐量性能。很显然,这样一种系统会使单线程性能很低。
那么,在多核系统中,如何来解决“多线程应用性能提高、单线程应用性能下降”的这种矛盾呢?到底多少个处理器内核才是最优的呢?
为此,我们可以事先定义好可以接受的最低单线程性能(minimum acceptable single-thread performance),然后对芯片进行优化,在限定的面积和功耗水平下,使其能包含尽可能多的内核。
此外,还有其他一些因素会限定内核的数量。一个因素就是通信(communication)和同步(synchronization),这一点在简单的吞吐量模型中往往被忽视了。而实际情况是,如果你想在一个并行、线程化的应用中使用不只一个内核,就需要某种通信/同步,而且,对于一个固定的工作负载,通信/同步开销是作业所用 CPU 内核数量的单调递增函数(monotonically increasing function)。由此,我们需要对 Amdahl 定律做些简单修改:
其中,T 为解决某计算问题所需的总时间,Ts 是完成串行(非重叠性,non-overlapped)工作所需的时间,Tp 是完成所有并行工作所需的时间,N 是并行工作中所使用的处理器数量,To 是每颗处理器的通信与同步开销。To正是传统 Amdahl 定律公式中所没有的??随着处理器的增多,总开销也会增加。
在没有引入通信/同步开销的传统标准模型中,总时间T就是处理器数N的一个单调递减函数(monotonically decreasing function),会逐渐接近于Ts。而在修改后的公式中,我们很清楚地看到,由于存在通信开销,随着处理器数N 的增加,在达到某一临界点后,总时间T就会开始增加。因此,对于一个完全并行的应用 (即Ts=0) 来说,其所需处理器的最优数量是:
比如,假设通信同步开销 To 是并行化时间 Tp 的 1%,那么,我们可以算出:使用 10 个处理器就能获得最大的性能表现。当然,在实际系统设计时,我们还需要权衡其他一些影响性能和性价比的因素。
3)多核芯片与RISC SMP的相似性
我们注意到,在多核芯片与上世纪90年代中繁荣了RISC服务器市场的RISC SMP系统之间,存在着非常有趣的相似现象。在过去的10年中,RISC服务器市场的硬件收入可是达到了2400亿美元。
首先,传统的RISC SMP提供了易于使用、缓存一致(cache-coherent)、共享内存(shared-memory)的应用特性,未来的多核处理器也同样会提供这些价值,不同的是,SMP是在一个单一的芯片上来实现。
其次,二者拥有相似的主内存延迟比率。1995年,SGI POWER Challenge是当时中端市场上最畅销的HPC服务器??笔者之一(McCalpin)就曾买过一台8 CPU的系统,花了40万美元。在1996-1997年间,其CPU主频是90 MHz (11 ns),主内存延迟接近 1000 ns(即90 个时钟周期)。而到了2007年,一颗AMD四核处理器的主频将超过 2 GHz (0.5 ns),主内存延迟约为 55 ns(即110 个时钟周期)。比较一下,我们不难发现,主内存延迟的比率是多么惊人的相似,均在100个时钟周期左右。
再次,二者在字节/FLOP上也相似。对于RISC SMP系统来说,能否提供足够的内存带宽是一大挑战。一套配备8颗CPU的SGI POWER Challenge的峰值浮点运算性能是2.88 GFLOPS,最高内存带宽为1.2 GB/s,即平均每FLOP约 0.42 字节。而一颗AMD四核处理器的峰值浮点性能将达到32 GFLOPS,最高内存带宽约12.8 GB/s,平均每FLOP也大约是0.4 字节。
4)X86多核处理器对RISC的冲击
1996年,UNIX 服务器市场的硬件收入超过 220 亿美元,到 2000 年,增加到了近330 亿美元。之后,这块市场一直在下滑,到2006 年,已下滑到了180 亿美元左右。我们认为,主要有以下三大因素导致了UNIX市场的萎缩:
越来越难以维持最初使UNIX服务器获得成功的系统平衡;
跟中低端的小型RISC SMP不同,大型多路RISC SMP无法降低每处理器的系统价格;
更低廉的IA32架构服务器的普及,以及2003年AMD 64架构产品的出现,大大冲击了RISC市场。
那么,具体来说,这三大因素是如何发生作用的呢?
①系统平衡被打破
如前文所述,起初,RISC SMP的主内存延迟大约在100个时钟周期,内存带宽为0.4字节/FLOP。内存延迟在很大程度上跟CPU数量是不相关的,但每颗处理器的带宽会因为配置不同数目的处理器而有所变化。
另外,在应用领域和处理器带宽之间也存在明显的系统相关性:缓存友好型的应用大多采用满配的SMP系统,而高带宽型的应用则配置较少的处理器,甚至是运行在单路系统上。
到了2000年,RISC SMP的主内存延迟大约减少了3倍,而CPU主频却增加了3-6倍。同样,随着系统总线转向多种多样的NUMA架构,每处理器带宽的变化也难以保持一致,情况变得更加复杂。这样一来,过去的系统平衡就逐渐被打破了。
②小型SMP和大型SMP的性价比差距越来越大
为了维持合理的系统平衡,服务器厂商在上世纪90年代中后期,也进行了大量的努力。虽然取得了不错的效果,但代价却是提高了系统的成本。导致成本增加的两大主要因素是为保持缓存一致性所需的片外SRAM缓存(off-chip SRAM cache)和监听系统总线(snooping system bus)。
对于RISC SMP系统来说,为了平衡相对较高的内存延迟,以及降低共享地址(shared address)和数据总线所需的带宽要求,大容量的片外SRAM缓存是至关重要的。但是,当英特尔不再使用标准的片外SRAM缓存之后,这一市场停滞不前了,跟其他电子元器件的发展趋势不同,SRAM的性价比变得越来越糟糕。到2000年,一个大容量的片外SRAM缓存所花费的成本甚至是处理器的好几倍。
不过,对于小型SMP系统来说,由于降低了对内存和地址总线的共享,因此,能够获得相对较低的延迟和较高的每处理器带宽。反过来,小型SMP使用小容量的片外SRAM缓存就可以了。这样一来,小型RISC SMP和大型RISC SMP在每处理器售价(price/processor)方面的差距越拉越大,越来越多的用户开始转向小型SMP集群,以取代大型SMP系统。
③多核X86处理器的性价比
到2000年初,基于X86架构的服务器在性能上开始接近基于专有RISC架构的服务器,而且前者在性价比方面更胜一筹。上述大型SMP向小型SMP集群迁移的趋势,也使得进一步向X86集群转移变得更加容易。随着2003年AMD64架构处理器的推出,向X86迁移也就更加盛行,因为AMD64提供了更好的性能、真64位寻址及整数算法能力。随后,英特尔也推出了EM64T架构,从而使得仅仅在几年的时间里,大多数X86服务器完成了从32位向64位的转变。
当然,这些趋势并不能说明用户对SMP系统不再有兴趣,而是说明,用户对大型SMP系统的性价比变得越来越敏感了。想想看,大型SMP和小型SMP之间的价格差距实在太大了,市场必然会欢迎更便宜的硬件产品。
过去,RISC SMP的发展促使大量ISV对其软件代码进行了并行化(在企业计算和科学计算两个领域都是如此),现在,多核处理器趋势则会进一步刺激更多的软件转向并行化,这些软件通常运行在价格更低廉的小型服务器上。
与上世纪九十年代RISC SMP市场不同的是,今天的多核处理器不再依赖于片外SRAM缓存,而且通过配置,可以避免芯片到芯片(chip-to-chip)之间昂贵的一致性流量(coherence traffic)??既可以通过监听过滤器(snoop filter),也可以简单地使用单路服务器,如SUN的T1/Niagara。