双核与多核处理器正迅速进入人们的的视野,让我们从最核心的处理器设计思路层面来解构一下多核处理器引入的线程级并行处理(Thread Leval Parallelism/TLP)技术。
关于开发基于线程优化的处理器的总思路
首先,让我们考虑一些设计问题。专门为高数据吞吐量开发新的处理器结构在概念上是很简单的。但是,这种处理器结构有很多副作用,包括好的和坏的副作用。我这里提出一些更基本的或者更高层次的问题。
二进制向后兼容仍非常重要
说起来似乎有点奇怪,但是,它的确非常诱人,以至于人们很少把全新的工业架构设计作为改善性能和效率的方法。(我自己有一些想法)然而。对于服务器的任务来说,任何比目前的服务器效率有显著提高的设计都需要超大的缓存或者庞大的主内存带宽来满足处理器处理大量数据的需求。没有任何方法可以回避这个问题:数据吞吐量较高的处理器能在相同的时间里处理更多的数据。这就意味着需要更多的带宽。
多处理器服务器仍需要认真地设计,以便得到良好的可伸缩性。一台服务器能够处理的数据吞吐量越大,这台服务器就越有价值。因此,高可靠性将越来越重要。面对系统、存储、软件、服务和技术支持成本问题,一种新的热门儿的工业标准架构设计必须考虑这些。这对于服务器市场是非常重要的。在服务器市场,需要提供技术支持的结构越多,确认和技术支持就越耗费时间,价格就越昂贵。因此,要记住安腾处理器的教训,并且提供能够让用户现有的软件更好地运行的硬件。
缓存设计不断变化的目标
缓存的存在可以减少主内存系统的负担。目前,缓存主要用来帮助减少延迟和部分地减少带宽的需求。对于这种芯片来说,缓存将主要用于帮助减少带宽的需求和部分用于减少延迟。这将导致设计人员选择更小、密度更大、但是延迟会更高的缓存设计。缓存的带宽需求也将显著增加,特别是多个CPU内核共享的缓存更是如此。
复杂性与效率之间的选择
对于主要设计思路是单线程性能的处理器设计,更高性能的设计一般来说就是一种更加复杂、但是效率不高的设计。对于高度TLP优化的设计,从每个处理器的性能、每瓦耗电量或者指定芯片尺寸的角度说,效率都是更重要的。虽然更简单的设计往往更有效率,但是,情况并非总是如此。例如,多个CPU内核共享逻辑电路或者缓存一般来说会更有效率,但是也更复杂。
耗电源和散热量的易与难
TLP优化的设计应该更省电。然而,这并不能消除耗电量的问题。每个芯片包含更多的内核意味着每个芯片拥有更多的逻辑电路和较少的SRAM内存(耗电量很低)。因此,使用耗电量低的逻辑电路就更重要。芯片冷却的某些方面将更简单。这是因为每个芯片上没有了以往的那些大的热点(例如单内核芯片),而是每个芯片上有许多小热点,所以平均温度会更均衡。
然而,每个芯片的耗电量可能会提高,而且可能会显著提高。冷却一个耗电量为50瓦的单内核芯片是非常容易的,但是,冷却一个四个内核的芯片(耗电量为200瓦)就是一个严重的挑战。每个CPU内核的耗电量越低,就越能够吸引人们在一个芯片上使用更多的内核。因此,大型多内核芯片时钟速度的设计也许采用更少的晶体管,或者限制连接线和耗电量。
在合理的范围内共享资源
对于芯片上缓存,一般来说最好是所有的内核共享。甚至一级缓存也能够被两个(或者更多)CPU内核共享(以后再详细介绍这个问题)。功能部件,特别是对延迟不太敏感或者很少使用的大型部件,也可以让多个CPU内核共享。共享能够在不降低性能的情况下减小芯片的尺寸和减少耗电量。更多的共享需要增加逻辑电路来进行管理,并且需要额外的电路用于共享部件的数据输入和输出。在芯片本身增加这些电路的可能性不大,因此,有局限性。
实际工作优于推测 推测好于什么都没有
当一个在单内核芯片上运行的程序运行到一个选择条件的分支点时,最好是推测这个程序应该往哪个方向走,而不是停止整个通道的运行。然而,由于每个CPU内核都有多个线程,对一个线程的推测可能会阻碍另一个线程的实际工作。因此,不依赖于推测就能得到更好的性能会更好,尽管在几乎所有的应用程序中没有推测会更糟。因此,最好是让实际工作优先于推测。
探索CPU内核、缓存、存储和系统设计的新概念并重新考虑老概念
简单地把重点集中在“在一个芯片上集成许多比较“简单的”的CPU内核”是最基本的。由于某些瓶颈已经显著减少,帮助芯片缓解瓶颈的“肥”CPU设计的功能就不太必要了,在某种情况下还可以取消这些功能。由于一些新的瓶颈仍将出现,某些领域的研究还需要增强,目前还没有实施的一些概念可以快速推向市场。
这并不仅仅是处理器的问题。系统设计、芯片封装设计、内存子系统设计和I/O设计的全部概念都需要重新考虑。某些效率充分的设计也需要“重头再来”,首先进行最小规模的设计,然后重新分析现代的功能,只有确认它们对芯片的数据吞吐量真正有帮助的时候才增加这些功能。