设计理念之变:多核心下的多线程
X86架构处理器诞生之后的很长一段时间内,包括AMD和Intel在内的厂商在提升CPU性能方面的思路都大同小异,无非是改进核心架构、提升处理器频率、优化和扩充指令集、加大二级缓存等等。而到了双核乃至多核CPU出现之后,AMD和Intel的处理器走向了截然不同的两种道路:增加物理核心数量和虚拟同步多线程。
首先说一下SMT(Simultaneous Multithreading,同步多线程),放在以前就是我们常说的HT(Hyper-Threading,超线程)技术。虽然这项技术在服务器领域早已应用多年,但在桌面处理器实现还要追溯到Intel的P4时代。但是出现之初并没有在P4处理其上大放异彩,而后的Core 2时代甚至遭到取消,直到上代的Nehalem架构才重新复活,重新命名为SMT,一直延续到最新的Sandy Bridge架构。不过P4时代的HT超线程和目前的SMT多线程在提升效果上已不可同日而语。
我们知道,传统CPU一个物理核心只能同步执行一个线程,所以大多数情况下都会处在等待内存以及数据总线的状态,而SMT可以使一个物理核心“同时”执行两个线程,看起来就像两颗“核心”一样。当第一个线程暂停时,将第二个资源准备充分的线程安排给核心处理,达到运算资源利用最大化。从设计原理上来看,SMT的目的也很简单,就是掩盖单个线程的延迟,以充分利用核心运算资源,以防运算单元浪费。
Intel的Nehalem架构处理器重拾超线程
SMT从成本方面来看相当廉价,因为它采用的是复制内核架构的方法来实现,增加了处理器中存储线程有关数据的单元数量,并在硬件执行单元空闲时将这些数据送往其中处理,以便增加处理器执行单元的利用度,而内部并没有增设一套额外的硬件执行单元。这样不需要增加物理核心,也耗费不了太多的晶体管和核心面积,所以比再另外增加一个物理内核更加划算。而且在操作系统中呈现出来和实实在在的物理核心并没有什么区别,所以我们经常见到四核八线程CPU在资源管理器中有八个“核心”在同时工作。
虽然SMT看起来很好,但也不是完美的。毕竟,无论如何充分利用运算资源,一颗核心始终都不可能达到两颗核心的效果。所以SMT的效率要根据实际的应用环境来定,比如遇到内存和缓存需要长时间等待的境况下,SMT就能发挥很好的作用;反之,甚至并不如一颗纯物理核心的执行效率。按照Intel之前公布的数据来看,SMT大约能带来20-30%的性能提升,换句话说也就等效于1.2-1.3个物理核心的效果。
相比之下,AMD之前的办法更加简单暴力,那就是CMP(Chip MultiProcessors,增加核心数量)。从理论上来看,直接增加物理核心的方式对CPU的性能帮助比较明显,也更加直接,尤其是在多线程应用环境下。
Phenom II X6 1100T就有六个物理内核
但这种方式也有很大的代价和瓶颈,毕竟每增加一颗物理核心就需要耗费更多的晶体管与核心面积,功耗也会随之水涨船高,而且核心数量增加到一定程度之后性能提升并不一定与之成比例,很容易受到制造工艺的限制。目前的软件以及游戏对多核心优化程度有限,很多实际应用环境只能利用其中的部分核心,而多余的核心只处在低负载状态,实际上也就被浪费了。
由于没有相关的多线程技术,单核性能也处于劣势,AMD只能靠物理多核心来对抗Intel的SMT多线程,反映到市场策略上来看就是,在价格相差不多的情况,AMD的四核/三核打Intel的双核,而六核打Intel的四核。虽然表面上AMD还能依靠这种“田忌赛马”的策略占据不小份额,但我们似乎也从其中感觉到丝丝无奈。
既非SMT,也非CMP,推土机采用了另一种设计思路。
不过好在推土机就要来了,虽然我们不期望它能一招制胜,但至少可以大大提升AMD的市场竞争力。工欲善其事必先利其器,推土机又依靠什么呢?相比之前的K10架构处理器,推土机在多线程、核心架构、指令支持、运算单元、数据总线等诸多方面都进行了革新,而其中以提高CPU的多核心下的多线程能力为主要设计目标,可见推土机既非照搬Intel的SMT也非自家传统的CMP,而是另辟蹊径,寻求新的设计思路。
事实上,在去年的年度高性能处理器研讨会Hot-Chips 22上,AMD就着重提到了推土机的多线程处理能力,而今年的Hot-Chips 23中,就此方面AMD更是不吝言辞,宣传较多。可见,多线程技术是推土机设计理念转变的重中之重。而这种多线程,AMD 称之为CMT(Cluster-Based Multi-Threading,簇式多线程)。如何实现CMT呢?就是我们下面要谈到的推土机模块化设计。