理论探讨:聚焦线程级并行设计(一)


双核与多核处理器正迅速进入人们的的视野,让我们从最核心的处理器设计思路层面来解构一下多核处理器引入的线程级并行处理Thread Leval Parallelism/TLP)技术。

关于开发基于线程优化的处理器的总思路

首先,让我们考虑一些设计问题。专门为高数据吞吐量开发新的处理器结构在概念上是很简单的。但是,这种处理器结构有很多副作用,包括好的和坏的副作用。我这里提出一些更基本的或者更高层次的问题。

二进制向后兼容仍非常重要

说起来似乎有点奇怪,但是,它的确非常诱人,以至于人们很少把全新的工业架构设计作为改善性能和效率的方法。(我自己有一些想法)然而。对于服务器的任务来说,任何比目前的服务器效率有显著提高的设计都需要超大的缓存或者庞大的主内存带宽来满足处理器处理大量数据的需求。没有任何方法可以回避这个问题:数据吞吐量较高的处理器能在相同的时间里处理更多的数据。这就意味着需要更多的带宽。

多处理器服务器仍需要认真地设计,以便得到良好的可伸缩性。一台服务器能够处理的数据吞吐量越大,这台服务器就越有价值。因此,高可靠性将越来越重要。面对系统、存储、软件、服务和技术支持成本问题,一种新的热门儿的工业标准架构设计必须考虑这些。这对于服务器市场是非常重要的。在服务器市场,需要提供技术支持的结构越多,确认和技术支持就越耗费时间,价格就越昂贵。因此,要记住安腾处理器的教训,并且提供能够让用户现有的软件更好地运行的硬件。

缓存设计不断变化的目标

缓存的存在可以减少主内存系统的负担。目前,缓存主要用来帮助减少延迟和部分地减少带宽的需求。对于这种芯片来说,缓存将主要用于帮助减少带宽的需求和部分用于减少延迟。这将导致设计人员选择更小、密度更大、但是延迟会更高的缓存设计。缓存的带宽需求也将显著增加,特别是多个CPU内核共享的缓存更是如此。

复杂性与效率之间的选择

对于主要设计思路是单线程性能的处理器设计,更高性能的设计一般来说就是一种更加复杂、但是效率不高的设计。对于高度TLP优化的设计,从每个处理器的性能、每瓦耗电量或者指定芯片尺寸的角度说,效率都是更重要的。虽然更简单的设计往往更有效率,但是,情况并非总是如此。例如,多个CPU内核共享逻辑电路或者缓存一般来说会更有效率,但是也更复杂。

耗电源和散热量的易与难

TLP优化的设计应该更省电。然而,这并不能消除耗电量的问题。每个芯片包含更多的内核意味着每个芯片拥有更多的逻辑电路和较少的SRAM内存(耗电量很低)。因此,使用耗电量低的逻辑电路就更重要。芯片冷却的某些方面将更简单。这是因为每个芯片上没有了以往的那些大的热点(例如单内核芯片),而是每个芯片上有许多小热点,所以平均温度会更均衡。

然而,每个芯片的耗电量可能会提高,而且可能会显著提高。冷却一个耗电量为50瓦的单内核芯片是非常容易的,但是,冷却一个四个内核的芯片(耗电量为200瓦)就是一个严重的挑战。每个CPU内核的耗电量越低,就越能够吸引人们在一个芯片上使用更多的内核。因此,大型多内核芯片时钟速度的设计也许采用更少的晶体管,或者限制连接线和耗电量。

在合理的范围内共享资源

对于芯片上缓存,一般来说最好是所有的内核共享。甚至一级缓存也能够被两个(或者更多)CPU内核共享(以后再详细介绍这个问题)。功能部件,特别是对延迟不太敏感或者很少使用的大型部件,也可以让多个CPU内核共享。共享能够在不降低性能的情况下减小芯片的尺寸和减少耗电量。更多的共享需要增加逻辑电路来进行管理,并且需要额外的电路用于共享部件的数据输入和输出。在芯片本身增加这些电路的可能性不大,因此,有局限性。

实际工作优于推测 推测好于什么都没有

当一个在单内核芯片上运行的程序运行到一个选择条件的分支点时,最好是推测这个程序应该往哪个方向走,而不是停止整个通道的运行。然而,由于每个CPU内核都有多个线程,对一个线程的推测可能会阻碍另一个线程的实际工作。因此,不依赖于推测就能得到更好的性能会更好,尽管在几乎所有的应用程序中没有推测会更糟。因此,最好是让实际工作优先于推测。

探索CPU内核、缓存、存储和系统设计的新概念并重新考虑老概念

简单地把重点集中在“在一个芯片上集成许多比较“简单的”的CPU内核”是最基本的。由于某些瓶颈已经显著减少,帮助芯片缓解瓶颈的“肥”CPU设计的功能就不太必要了,在某种情况下还可以取消这些功能。由于一些新的瓶颈仍将出现,某些领域的研究还需要增强,目前还没有实施的一些概念可以快速推向市场。

这并不仅仅是处理器的问题。系统设计、芯片封装设计、内存子系统设计和I/O设计的全部概念都需要重新考虑。某些效率充分的设计也需要“重头再来”,首先进行最小规模的设计,然后重新分析现代的功能,只有确认它们对芯片的数据吞吐量真正有帮助的时候才增加这些功能。

理想的CPU内核尺寸以及每个芯片的内核数目

内核和最佳线程是没有固定数量的。这不仅是因为技术在不断的变化,而且还因为不同的设计有不同的目标和选择。每个芯片上可能集成的CPU内核的最大数量将要遵循摩尔定律,如果芯片的平均尺寸保持不变,那么,每个芯片上的内核数量将不断增长。

虽然没有理想的数量限制,但是,大多数拥有多硬件线程的CPU内核都有2个、4个或者8个线程。也就是说,除非使用完全不同的线程技术,否则,全都是这样。使用SMT或者“Niagara”芯片以及其它芯片的粗粒度多线程技术,更多的硬件线程就能够占用空闲的资源。但是,这将增加芯片的成本和复杂性。由于边际成本不变,每个空闲线程带来的边际收益将下降。线程过多实际上会降低性能。

多内核的缺点

新闻中讨论最多的问题是软件许可证问题,因为很多独立软件经销商是按每个“处理器”收取软件许可证费用的。许多独立软件经销商都认为“按处理器收费”就是“按每个CPU内核收费”。换句话说,如果用户购买了一台配置两个双内核处理器的服务器,就必须要按照4个处理器的标准支付软件的许可证费,使整个系统的软件使用成本高于配置两个单内核处理器的服务器。目前,这还是一个支流问题。但是,当英特尔和AMD发布其双内核x86处理器的时候,这将成为一个严重的问题。

向用户提供多内核处理器的一个问题是用户购买和升级的灵活性比较小。一台采用双内核处理器的4P(配置4个处理器插座)服务器系统能够从1个芯片升级到4个芯片,从2个CPU内核升级到8个CPU内核。但是,一个配置8个内核的处理器就只能有8个内核。一个变通的方法就是把8个内核的芯片按照4个内核的芯片销售,因为在某种情况下只有4个内核可以使用。这种情况是切合实际的,因为在生产的时候,有些芯片没有8个功能完美的内核,但是,这些芯片至少有4个供用户使用的完好的内核。这样做肯定比扔掉拥有4至7个可以工作的内核的芯片要好得多。

人们推测的一个潜在的问题是为多CPU内核选择时钟速度。毕竟同一种生产工艺制作的不同芯片是按照不同的时钟速度确定质量的。因此,在一个多内核芯片中,这种芯片不能仅限于使用速度最慢的CPU内核吗?然而,在实践中,这可能不是一个问题。与不同的生产线生产出来的芯片相比,同一片晶圆生产出来的芯片具有更多的相似特点。两条相邻的生产线生产出来的芯片更有可能具有相同的特点,并且可以达到同样的速度。因此,一个多内核芯片中所有CPU内核可能都会达到同样的速度等级。

简要重新回顾Sun的“Niagara”芯片


第一款“Niagara”芯片

自从我的上一篇文章发表以来,又出现了许多关于Sun的8个内核的Niagara芯片的信息。虽然Niagara式的芯片可能有些例外(从单线程性能和多线程性能相比较的角度说),但是,看一下这种芯片仍然是很有趣的,因为这是惟一的一种我们拥有许多详细资料的高级的TLP优化的服务器处理器。这种处理器不仅没有使配置两个内核,每个内核有两个线程的IBM POWER5处理器相形见绌,而且这种处理器到目前为止还没有发展到数据吞吐量明显比单线程性能更重要的阶段。

Sun已经制作出了第一款Niagara芯片,并且正在Sun的实验室中运行。虽然这种处理器的最大耗电量只有60瓦,但是,这个处理器支持16个2GB的DIMM(双列直插式内存模块)内存,一共支持32GB主内存和每秒钟20GB的主内存带宽。这个芯片中的8个内核共享一个3GB二级缓存,每一个内核有一个16KB的一级指令缓存和一个8KB的一级数据缓存。这种芯片管线长度只有6级(stages),没有分支预测单元。

看一下这个照片,这个芯片有将近2000个插针用于供电和I/O。其中大部分是用于主内存系统的。AMD的Opteron处理器在芯片上有一个双通道DDR主内存控制器。但是,Niagara在一个芯片上有4个双通道DDR2主内存控制器。

虽然关于芯片的尺寸直到最近也没有最新的消息,但是,根据2003年的说法,这种芯片的尺寸可能是大约350平方毫米。与英特尔采用90纳米制程生产的奔腾4处理器相比,Niagara处理器的耗电量要少一半。但是,这种芯片比奔腾4大三倍,从而使功率密度比奔腾4小六倍。Niagara处理器应该比较容易冷却。

Sun已经在研制Niagara 2处理器。这种处理器有内置的千兆以太网功能,预计将与Sun高端的Rock处理器在同一个时间段推出。虽然Niagara系列芯片旨在以每个线程极小的CPU散热量用于高密度网络应用程序,但是,Rock处理器将具有更重要的单线程性能。Rock处理器不仅是为Sun的“肥”UltraSPARC V处理器设计的,而且显然拥有与Niagara芯片同样数量的硬件线程。


相关内容