今年,众所期待的 AMD Ryzen CPU 终于上市了。从 2012 年开始研发,背负着带领 AMD 重返荣耀的 CPU,一上市便造成轰动。极高的性价比以及低功耗,为笔电以及桌机的 CPU 市场,注入了活水。然而,当众人都说要重返荣耀,那 AMD 的过往荣耀是什么?这一间公司又是如何让 Intel 感到头疼?这一切,就从 AMD 发表 x86-64 指令集架构说起。
64 位元处理器的兴起
在 32 位元 CPU 中,如果单纯以 CPU 做内存定址时,4GiB 为其极限。多余的空间,则需额外的软硬件支援。在早期的超级电脑中,这一类的需求可以靠钱解决。然而,随着内存技术的发展,在一般商业甚至是一般消费性市场中,4G 以上的内存将越来越常见。如果有一款 CPU 可以直接定址大量的内存,将带来相当大的优势。
因此,从 1990 年代起,众多的 CPU 制造商开始研发制造 64 位元的 CPU。其中,PC 市场的领头羊 Intel 便从 1994 年开始,和 HP 共同发展新的 64 位元指令集架构及 CPU,以因应接下来的 CPU 市场竞争。然而,Intel 所提出的 64 位元 CPU,其指令集架构和旧有的 x86 截然不同,将导致原有的程式会无法在新的 Intel CPU 上执行。
1999 年时,AMD 发表和 Intel 截然不同的方法。AMD 决定将既有的 x86 指令集架构,扩增成 64 位元的指令集。采用这个方法意味着原有的程式,将得以执行在新 AMD 64 位元的 CPU 上,大大减低后续重新编写程式的需求。指令集架构的差异,替 AMD 立下胜利的基石。
64 位元指令集架构之战,AMD 大获全胜
在 2001 年,Intel 终于发表第一款 64 位元 CPU──Itanium。然而,这一款 CPU 在市场的接受度却没有如其预期,迅速被采用。最主要的原因,莫过于软件的数量不足,以及和其他 64 位元处理器相比的弱势效能。
其中,软件数量不足的关键,就在于指令集架构的差异。在高速计算里,为了让程式得以执行更快,大多数工程师会修改或直接编写组合语言,以期让程式更符合硬件的执行模式。如果更换不同的指令集架构,将需要耗费大量时间修改组合语言,甚至重新开发整个程式。
此外,没有明显优势的 CPU 效能,也让开发商不愿投入更多资源在 Intel Itanium 上。因此,Intel 只能加速下一款 CPU 开发,以期待满足市场的需求。
2003 年,震撼市场的消息发出。AMD 发表了第一款 x86-64 的 CPU──Opteron 以及 Athlon 64。光是让既有的 32 位元 CPU 运行其上,就已为 AMD 添增光彩。更不用说新 CPU 采用的硬件架构 K8 是何等强悍。
扭转颓势,Intel 版 x86-64 现身
为了避免商用以及高速科学计算领域的市占率下滑,Intel 于 2004 年时紧急推出新的 Xeon CPU。此外在桌机市场,Athlon 64 的优秀效能,让 Intel 不得不以既有的 Pentium 4 为基础将指令集架构扩展至 64 位元。
然而,即使 Intel 推出新的 CPU,其 CPU 硬件架构效能提升却不足,导致新的 CPU 效能稍微落后采用 K8 架构的 Opteron 以及 Athlon 64。K8 架构成了传说,为 AMD 带来荣耀。同时,其主要硬件架构师 Jim Keller 也逐渐为人所知。
迈向多核心之路,黄金交叉将出现?
在 2005 年 5 月时,AMD 以及 Intel 皆发表了消费者市场的双核心 CPU,分别为 AMD Athlon 64 X2 以及 Intel Pentium D。第一款消费市场的双核心 CPU,揭开了崭新的时代序幕。多核心便意味著作业系统中的多执行绪,可以同时运行在一颗 CPU 中,大幅降低执行绪所需等待的时间。
比较这两款 x86-64 双核心 CPU 的效能时,这一次,AMD 维持其领先姿态,Athlon 64 X2 的效能大幅超越 Pentium D。AMD CPU 的市占率一举攀升,就在黄金交叉将要出现时,Intel 展开逆袭,2006 年 8 月,Intel 推出下一代 CPU──Core 2 系列。
▲ 由 CPU Benchmarks 统计的资料,该资料是统计全球使用该款 benchmarks 的 CPU 厂牌。虽然不是实际的 CPU 出货量,但足以参考。(Source:CPU Benchmarks)
新系列的 Intel CPU 断开和 Pentium 4 的关联,以 Pentium III 的 CPU 硬件架构为基础重新设计,并采用 AMD 所发展的 64 位元指令集架构。这一次,Intel 以过往成功的产品为基础并重新设计,以 Core 为名重新出发。这一次,Intel 结束产品线的混乱以及效能低落的数年。
同步多线程,彻底发挥 CPU 核心的计算能力
在 2008 年,Intel 将其 Hyper-Threading 的技术重新导入 Core i 系列 CPU,也就我们现在所熟知的 i3、i5、i7 处理器。所谓的 Hyper-Threading,便是在一个 CPU 核心内部在将其分成两份。然而,究竟如何将 CPU 切成两份呢?根据 Intel 于 2002 年发表的 Hyper-Threading Technology Architecture and Microarchitecture 可略知一二。
在论文中,Intel 给了两张比较图。两个核心最主要的差异,在采用 Hyper-Threading 技术的 CPU 中,Architecture State 单元会比一般核心多一个。大致上,Architecture State 单元包含了多数暂存器及中断讯号的控制器等,用以记录执行绪执行的资讯,是无法共用的资料。
▲ 左图为未采用 Hyper-Threading 技术的 CPU Cores,右图则是采用 Hyper-Threading 技术的 CPU Cores,其中,两者间的差异为一个 CPU Core 中有不同数量的 Architecture State 单元。(Source:Intel Technology Journal Vol. 1)
因此,在采用这个技术之后,只需要额外 5% 的面积,便可达成更高的指令集平行化,让 CPU 尽可能满载,释放 CPU 所有潜能。根据这篇论文提供的数据,采用这项技术后,在多执行绪的执行情况下,将可带来近 30% 的效能提升,相当惊人。
做为应对,AMD 于 2011 年推出 Bulldozer,采用的并非 Intel 使用的 SMT 技术,而是 Clustered MultiThreaded(CMT)技术。此技术是将一颗 CPU 内部的整数执行单元复制一份,让 CPU 具备在同一核心内部执行两个执行绪能力,在后续扩增核心的计算能力上,相当容易,所需要的修改相对较少。
然而,其缺点便是没有办法共用执行单元,无法享有 SMT 中最重要的优点,用两个 Thread 尽可能让执行单元不会有空闲状态。此外,两个独立的 L1 Cache 虽然感觉在实作上比较简单。但为了要维持 Cache 的一致性,需要拥有额外的 Core 内部资料交换单元,大大提升控制电路的复杂性。
最后,结果便是众所皆知的,AMD 于 x86 的 CPU 市占率直直落,现今中高阶笔电市场中,更几乎看不到采用 AMD CPU 的产品。就在 AMD 要消失在市场时,Zen CPU 的消息传出!
Ryzen CPU,硬件架构的重新设计
在 2012 年,K8 的主要硬件架构师 Jim Keller 回到 AMD。这一次的回归,让 AMD 重返荣耀的声音响起。是否新的 CPU 可再现 K8 的传说?这一次 Ryzen CPU 和先前的 AMD CPU 有何差异?
比较底层硬件架构,可以发现 Ryzen CPU 取消了 Bulldozer 提出的 Integer Cluster,并以类似 Intel Hyper-Threading 的技术取而代之,如此便能让 CPU 尽可能达到满载。
此外,新的 Ryzen CPU 也引进了 Intel 于 Sandy Bridge 架构开始采用的 Micro-op Queue,以减少重新 Decode 的需求,提升单次可执行的指令数。借由更多先进技术,让 AMD 获得大幅度的效能提升。也因此,AMD 公布 Ryzen CPU 每个周期可执行的指令比前一代 CPU 多 52%,改善幅度相当大。
至于实际的 Ryzen CPU 效能如何呢?现在已有相当多评测文章将 Intel Kaby Lake 系列和 Ryzen 系列 CPU 做比较,在这不再多评比。不过在一般应用上,AMD 的 CPU 不会再像之前的 CPU,看不到 Intel CPU 的车尾灯。
▲ AMD 于 2016 年 HOT CHIPS 上发表的架构图。从中可发现,新架构取消 CMT 技术,让 CPU 核心变得较不复杂。(Source:AMD)
至此,我们已看完了两大 x86 巨头的厮杀,同时在短短 17 年间,CPU 产业采用相当多技术,以满足与日渐增的计算需求。千禧年后 CPU 的发展简史,让我们见证了一代 CPU 王者的兴起没落以及归来。
▲ 可发现在 AMD Bulldozer 中,一共有两个整数运算单元,此技术便称为 Clustered MultiThreaded。(Source:By Shigeru23 (Made by uploader (ref:[1], [2], [3])) [GFDL or CC BY 3.0], via Wikimedia Commons)
(首图来源:pixabay)