1995 年 10 月 21 日,AMD 宣布以 8 亿 6,500 万美元购併 NexGen,取消自家 K6 处理器专案,由 Nx686 取而代之,并于 1996 年 1 月 17 日完成此收购案。
这件震动处理器业界的大事,一举扭转了 AMD 在高效能 x86 处理器市场,因延宕已久的 K5 在效能和销售表现均远不如预期,竞争力落后 Cyrix 的劣势,并争取到开发 K7 与 K8 处理器的宝贵时间,确立了 AMD 从众多英特尔竞争者中脱颖而出、成为长达 25 年的英特尔唯一实质对手。
没错,很多资深电脑玩家曾拥有的 K6 处理器,严格说来,就是 AMD 花钱「买」来的。
为什幺 NexGen 这间小型无晶圆厂晶片设计公司如此值钱?这桩购併案的后继影响会如此深远?这就跟他们领先诸多 x86 同行的先进设计息息相关了。
尤其是「RISC86」概念,将複杂并毫无道理可循的 x86 指令集,「转译」成 RISC 型态的固定长度微指令,更深深影响日后 x86 处理器的发展。像近代高效能 x86 处理器该具备的特色,从动态分支预测、非循序指令执行、预测执行、到第二阶快取记忆体专属汇流排等,更无一不缺,超越其他英特尔竞争者。
印度人在硅谷崛起的先驱
印度与硅谷的半天时差,使两者可无缝接轨的接力作业,搭配印度良好的科技教育,奠定了印度在软体产业与资讯科技的稳固地位。近年来,从 Google 到微软,多数知名企业的执行长都清一色是印度人,而以硅谷为中心的美国资讯科技产业与新创企业,满山满谷的印度人,早已是世人习以为常的场景。
但这个现象,其实更早之前就已埋下种子。
1946 年 4 月 11 日,出生于印度、史丹佛大学取得电机硕士与博士学位的 Thampy Thomas,在 1979 年与他人共同创立 Elxsi,并于 1979~1985 年任职于此,是世界第一间实做共用系统汇流排多处理器架构的公司,也是硅谷首间由印度人成立的新创企业。
Thampy Thomas 在 1986 年成立 NexGen,最初想专注高效能多处理器系统,但放弃此念头,转向研发 x86 指令集相容处理器。NexGen 拥有长长一串投资人清单,包含好几间风险创投、当时最大个人电脑製造商 Compaq、义大利 Olivetti 集团和日本 ASCII,总计募集多达 9,000 万美元资金。
理所当然的,NexGen 绝无足够本钱养晶圆厂,产品皆由 IBM 代工製造。NexGen 在 1994 年 3 月推出的首款产品 Nx586 处理器(但迟至 1994 年 9 月才大量供货),就使用和 IBM PowerPC 603 一模一样的 0.50µm 製程。
早在 1980 年代末期就萌芽的 RISC86
NexGen 原先想以 80386 世代处理器为起点,但因初代产品设计太过複杂,竟然动用「8 颗晶片」(其实这并不奇怪,像 IBM 初代 Power1 处理器更多达 10 颗晶片),时程也赶不上市场需求,因此转战 80486 世代的第二代产品:Nx586(代号 F86)。
但这在 1980 年代末期就完成初始设计、从未商品化的「8 颗晶片」专案,已是 RISC86 的核心,将编码长度从 1~17 Bytes 都有可能的 x86 指令,由指令解码器转译成一到数个「固定 104 位元长度」的 RISC86 微指令,并在涉及记忆体存取的部分,採取近似 RISC 的「载入─回存」(Load-Store)模型,运算动作则限定于暂存器为运算元。
以一个简单将暂存器与记忆体相加,并将结果回存至记忆体运算元为例:
Add [mem], CX // CX + [mem] → [mem]
就会转换成:
Load R2, [R1] // 将记忆体资料 [R1] 载入 R2 实体暂存器
Add R2, R3 // 将 R2 R3 两个实体暂存器资料相加,存入 R2
Store [R1], R2 // 再将 R2 回存记忆体 [R1]
然后 RISC86 微指令的大多数栏位「水平」(horizontal)对应电路动作,利于管线化与提升时脉速率,并尽其所能在 RISC86 处理器核心同时执行。同场加映一下稍晚的 AMD K5(5K86)和英特尔 P6(Pentium Pro):前者长度是「平均」59 位元,后者则和同样 RISC86 相近的固定 118 位元,但两者都落后 NexGen。
隐藏在「让 CISC 指令在 RISC 核心执行」背后的意义,在于「加速常用的简单指令,不常用的複杂指令维持相容性即可」,这「Make The Common Case Fast」的思维,更是 RISC 之所以崛起的核心价值。
看起还很像超纯量但又不是超纯量的 Nx586
AMD 官网对 Nx586 的产品简介,描述「Nx586 是超纯量管线(Superscalar)处理器」,这说法其实只对了一半。
Nx586 可在内部同时执行最多 4 个 RISC86 微指令,分配给 2 个整数逻辑运算单元、1 个位址计算单元和 1 个浮点运算单元,但受限于每个时脉週期只能撷取并解码一个 x86 指令,自然也无法输出一个以上的 x86 指令结果,所以称不上是货真价实的超纯量管线(同样只有一个指令解码器的英特尔 NetBurst 算是某种特例)。同样情况,也重现于威盛电子 x86 处理器技术基础的早期 Centaur 产品。
「看起来很像超纯量却又不是超纯量」的 Nx586 亦难以摆脱古老年代的技术门槛或成本限制:类似英特尔 Pentium 的不对称两条指令管线(u/v Pipeline),Nx586 两个整数逻辑运算单元,只有一个可执行全部指令,另一个仅能处理简单的单时脉週期运算(2008 年初发表的威盛 Nano 倒是也有类似困扰),这也让 Nx586 内部的 RISC86 微指令排程需「负载平衡」,尽量塞好塞满。
Nx586 为「超级纯量」(Super “Scalar”)处理器,火力配备绝非追求「简单、迅速、便宜」的 Centaur 能望其项背,设法保持管线满载这件事上,完全不是同个档次,如优于 Pentium 的动态分支预测机制(兼具返回位址缓冲区和分支目标快取)。结合动态分支预测与非循序指令执行的「预测执行」,更是迟至 2008 年 5 月的 Nano,才在威盛 x86 处理器出现的「创举」。
而 Nx586 的複杂整数运算与双倍精度浮点运算(须加装 Nx587)的性能更是极为出色,和英特尔 Pentium 和 IBM PowerPC 601 平起平坐,无论 Cyrix 6×86 和 AMD K5,均瞠乎其后。
超越时代的快取记忆体阶层架构
1995 年底登场的英特尔 P6(Pentium Pro)之所以能在效能表现辗压同时期全体 x86 处理器,除了傲视当代的核心微架构,高效率的系统汇流排与「直通」处理器核心的第二阶(L2)快取记忆体亦举足轻重。以下图为例,右边是 Pentium Pro 经由多晶片封装(Multi-Chip Module,MCM)包起来的 256kB L2 快取记忆体,与处理器相同时脉。
这也是在 1990 年代中后期,相容 Socket 5 / Socket 7 的诸多英特尔竞争者产品,先天的巨大原罪:Pentium 系统前端汇流排(Front-Side Bus,FSB)频宽与延迟早已不如 P6,还得消耗一部分在存取位于主机板的 L2 快取记忆体。这问题在 1999 年初的 AMD K6-III,直接内建 256kB L2 快取才解决,这也让主机板的 L2 变成 L3,虽然这 L3 已看似聊胜于无。
那幺这些厂商干幺不做 Socket 8(Pentium Pro)或 Slot 1(Pentium II、Pentium III)相容处理器?问题是英特尔就故意不给你源自 AGTL+ 专利的 P6 汇流排授权,除非有办法像 AMD 从 K7 开始自己搞平台架构,或者像 Cyrix 慢慢等授权再出 Socket 370 脚位产品。
这对早在 1994 年 3 月发表的 Nx586 却从来不是麻烦。高效能的记忆体子系统,多少弥补了缺少货真价实超纯量管线的缺憾。
Nx586 和英特尔 P6 同样内建 L2 快取控制器(命中率更高的 4 路组关联性)与 64 位元双向专用汇流排(AMD K6-III 则是两条单向 64 位元),支援 256kB 或 1MB 容量。因用来搜寻快取区块的标籤(Tag)资讯,直接存放在资料 SRAM 内,有别于增加标籤专用储存空间的标準做法(如果你以前曾在主机板加装 Tag RAM 以扩展可被快取涵盖的主记忆体容量,应该会多少有点印象),快取记忆体的实质容量约减少 6%。
专用的 L2 快取汇流排,也利于提高 L2 快取记忆体的运作时脉,并让 L1 / L2 之间,採用易于维持资料一致性的写通(Write Through)策略。
但 Nx586 与 Nx686 原案在快取记忆体架构最神奇之处,在于「L1 快取的时脉是处理器核心的两倍」,意味着单一时脉週期内可两次存取,「多出来的那次」就用来和 L2 快取记忆体或系统主记忆体「互通有无」,或着用来执行快取资料一致性(Cache Coherence)协定的窥探(Snoop)。下一款「L1 快取跑两倍时脉」的 x86 处理器,就是相隔 10 年的英特尔 90 奈米製程 Pentium 4「Prescott」了。
无法相容 Pentium 脚位不利于市场推广
L2 快取专用汇流排之外,Nx586 的前端系统汇流排也是自行定义的 NexBus,这让 Nx586 需专属规格脚位与系统晶片组。为此,NexGen 提出两款 Nx586 主机板规格,一片支援 VESA Local Bus(NxVL 晶片组),另一片则是 PCI(NxPCI 晶片组),皆由日本富士通(Fujitsu)生产,两者都需加上一颗 82C806 中断控制器。
就商业考量而言,「关起门来自己玩」也或多或少不利于 NexGen 的市场推广。当避开 Socket 5 / Socket 7(也许得加上古老的 Socket 4)的效能弱点,却也「等价交换」更侷限的相容主机板与系统晶片组选择性。况且 NexGen 的晶片组也不太顺利,像 NxPCI(820C500)就因多次延期,足足延后了一年。这也埋下了 NexGen 被 AMD 併吞后,Nx686 迈向与 Pentium 脚位相容的种子。
外挂式 x87 浮点运算器
从英特尔 Pentium 开始,「处理器内建浮点运算」成为今日约定俗成的常识。但初期 Nx586 却需外挂一颗 Nx587 浮点辅助运算器(皆为 IBM 0.44µm 製程),加上 L2 快取汇流排,让 Nx586 的处理器脚位数(463)远多于 Pentium(296),这也增加了晶片封装和主机板成本,那时亦不乏「NexGen 牺牲浮点运算器,换取 L2 快取记忆体控制器」、「增加系统厂商的产品规格弹性」等另类观点,但规格输给 Pentium 仍是不争的事实。
毕竟浮点运算逐渐演变成不得不提供的必备功能,1995 年 11 月,也就是「藉由多晶片封装包裹处理器核心和同时脉 L2 快取记忆体」的英特尔 Pentium Pro,降临 x86 处理器市场的时候,NexGen 也推出多晶片封装 Nx586 核心与 Nx587 浮点运算器的 Nx586-PF 系列。但在「个人电脑等级的产品」于当时所费不赀的多晶片封装,怎幺看都不是什幺好主意。
P-Rating 救不了时脉劣势
「只会让自己的产品看起来比英特尔差,而不会比较好」的 PR(P-Rating)值,是 1990 年代中后期,几乎所有英特尔竞争者(Cyrix、AMD、Rise、Centaur)都不能不引进的效能等级标竿,因为产品时脉就是输给英特尔一大截,英特尔在高时脉微架构和製程技术的双重优势硬是摆在那边,只能山不转路转,路不转人转。
此类手段最早「登记有案」的是 AMD Am5x86-P75,象徵时脉 133MHz 的 5×86 可匹敌 Pentium 75MHz。后期 150MHz 的 Am5x86-P75+,多那个 Plus 则代表「超越」Pentium 75MHz,暗示他们的表现「青出于蓝胜于蓝」,当然亲身体验过这些「在比较老旧的英特尔处理器脚位,提供接近下一世代产品效能表现的替代品」,就知道根本不是那幺一回事。
1994 年的 NexGen,将 Nx586 标上「Pxx」,如时脉 70MHz 是 P75、75MHz 则是 P80,以此类推到时脉 120MHz 的 P130。
但并非货真价实超纯量管线的 Nx586,就算「架构性效率」再优异,儘管一开始还勉强可和 Pentium 抗衡,看在英特尔长期享有压倒性的时脉延展性份上,终究难以对抗英特尔 Pentium,性能差距在 82430FX「Triton I」晶片组后更明显。
Nx586 须加挂 Nx587 浮点运算器,或承担多晶片封装的高成本,也缩减了原本享有的成本优势(连投资 NexGen 的 Compaq 都未能在个人电脑产品线广泛导入 Nx586),NexGen 尽快打造新兵器势在必行,AMD K6 的原型就这样诞生了。
正面挑战英特尔 P6 的 Nx686
1995 年 10 月 10 日,当 NexGen 正与 AMD 洽谈购併案之际,公布了新一代产品 Nx686 的全貌,并公开了时脉 180MHz 的工程样品(IBM 0.44µm 製程),基本上可视为「Nx586 整合浮点运算器后的超纯量管线规模放大版」,这也是资深个人电脑玩家所熟知的 AMD K6 家族的技术基础,所以技术细节姑且在此不论。
各位只需记得 Nx686 的动态分支预测规格强的有点变态、浮点运算相较英特尔 P6 看似互有长短(延迟较短,输出较差)却仍远较逊色就够了。
先进的动态分支预测机制
关于动态分支预测,Nx686 直接配置了「透过分支发生的全域纪录,以提高不规则分支行为的预测精度」的双层式分支预测器(2-Level Predictor),并额外增加了「存放分支目标所在的 16 Bytes 区块」的快取记忆体(Branch Target Cache),以便指令管线尽速撷取需要的指令,缩减分支发生时造成的延迟。
这里就非得稍微提一下为何双层式动态分支预测如此重要,不是说分支历史表只要有切换分支是否发生的历史状态(像常见的 2 位元饱和预测器),不就得了?
但有些分支是彼此有相依性的。以下面为例,第二个分支(if)是否发生,取决于第一个分支的结果。
if (a = 0)
a = 1;
if (a = 1)
另一种常见的情况是迴圈(Loop)。以这案例来说,总计会产生十次的条件判断,前九次都会发生,但最后一次不会,光靠 2 位元饱和预测器,无法避免最后一次的预测失误。
for (i=1; i<=9; i++)
所以自然就出现利用记录该分支历程的「全域历史」,来强化预测的精準度。以下是以最近 6 次的分支结果(发生─发生─发生─未发生─发生─未发生)为索引,指向不同的 2 位元饱和预测器。以 Nx686(后来的 AMD K6)为例,9 位元全域历史(另外加上来自程式计数器的 4 位元),指向一张 8192 个纪录点的历史表。
Nx686 也和 Nx586、Intel P6 和 Cyrix M1 一样,提供返回位址缓冲区(Return Stack Buffer),最多可应付 16 个副程式呼叫。
不过不同厂商都会各自有不同层面的考量,做法也思维相异。像追求「简单、迅速、便宜」的威盛体系 Centaur 就在 WinChip 4(C4)做成「全域区域各一张历史表,然后再用第三张表选择比较準的那一个」。考虑到研发时程、製造成本,与预测失败的回复代价,动态分支预测搞得太複杂,也不见得是好事,像 AMD 就承认他们觉得 K6 这部分「做过头」,反而在指令管线更深的 K7 和 K8 选择了更简单的路线。
让 Nx686 相容 Pentium 脚位的 K6
但 AMD K6 并未照单全收 Nx686 的遗产,有了以下「调整」:
- 扬弃 NexBus 和 L2 快取专属汇流排,相容英特尔 Socket 7(P54C)脚位,沿用既有 Pentium 系统晶片组与主机板。这重大的决定,据传由曾历经英特尔 Pentium 设计团队领导者与事业单位总经理、跳槽到 NexGen 担任营运长的 Vinod Dham 推动。他本人也在购併案后,在 AMD 接掌 K6 与 K7 相关计画。
- 取消两倍时脉的 L1 资料快取记忆体。
- 强化 L1 指令快取,加倍容量(16kB→32kB)和指令撷取埠,并扩增预先解码位元改善指令解码效率(增加 20kB SRAM 实际容量)。
- 支援 MMX 指令集(3D Now! 从 K6-2 才开始)。
- 转由 AMD 晶圆厂生产(刚刚好 AMD 在德州奥斯丁的新厂 Fab 27 刚落成,急需新产品塞满产能),从 IBM CMOS-5S(0.44µm)升级成更加先进的 AMD CS-34(0.35µm)製程。
其余规格则几乎与 Nx686 雷同,包括连 AMD 事后都觉得「非常超过」的动态分支预测。
吹响 AMD 空前盛世的前奏曲
重新设计后的 AMD K6 在 1997 年 4 月 2 日问世,与 1 月 8 日英特尔 Pentium MMX、5 月 7 日英特尔 Pentium II 和 5 月 30 日的 Cyrix 6x86MX 正面交战。即使 K6 的整体技术水準仍不及 P6 微架构的英特尔 Pentium II,但对付 Pentium MMX 和 6x86MX 已绰绰有余。
且 AMD K6 的销售表现一向不错,1998 年底,美国零售市场的 1 千美元以下个人电脑,具 3DNow! 指令集的 K6-2 占有率高达「50%」,比发动高时脉 Celeron 大攻势的英特尔还要高,1998 年第四季的全球总销售量也将近 500 万颗──正巧是个人电脑出货量一年抵达 1 亿大关的历史关键点。
仰赖零售市场才能生存(此时英特尔竞争对手的通病)的 Cyrix 就这样惨遭 x86 双雄活活夹杀,逼国家半导体脱手 Cyrix,IDT 也顺势出清了「简单、迅速、便宜」的 Centaur,两间都在 1999 年陆续纳入威盛旗下。
争取研发 K7 和 K8 的宝贵时间
K6 也让 AMD 挽回因 K5 的失败而差点失去的机会,争取到珍贵的喘息时刻,集中能量着手 K7 与 K8 研发,也注定 AMD 以外的英特尔竞争者,一间间走向边缘化的悲惨命运。当 AMD 宣布购併 NexGen 时,市场马上传出 IBM 也将吃掉 Cyrix 的谣言,还好 IBM 没有想不开挖洞给自己跳,否则后果将不堪设想(但搞不好 Cyrix 员工比较想加入 IBM,而不是国家半导体和威盛)。
最重要的是:NexGen 团队成员大致都有保留,最起码确保了 K6 衍生款的后继发展不会就此中断,稳住 AMD 的基本盘,没有出现像威盛购併 Cyrix 后「人去楼空鸟兽散,旧爱新欢皆腰斩」的惨况。创造「x86 指令集毫无道理可循」传世名言的 AMD K5 总工程师 Mike Johnson 继续留在岗位,带领新一代产品开发工作,AMD 也建立起类似英特尔「两个研发团队交替接手不同世代产品」的分工体系。
接着就是我们更熟悉的故事:从 DEC 带枪投靠的 Dirk Meyer 进入 AMD 成为 K7 总工程师,踏上步步高升营运长和执行长大位的阶梯,1995 年就加入 AMD 的技术长 Fred Weber,主导的 K8 更帮助 AMD 迈入前所未见的盛世,不仅让 AMD 在品牌个人电脑大厂的供应链占有一席之地,更让 AMD 打开伺服器市场的天堂大门。
购併就是花钱买时间
拿破仑曾说过:「战略是『时间』与『空间』的艺术,而我比较重视时间,因为失去空间尚可收回,但时间却一去永不回。」企业之间的兼併,又何尝不是如此?时间永远是最昂贵的成本,为了省钱而慢慢搞(不少台商想发展「新事业」的坏习惯),搞到市场先机都没了,还不如靠购併快速进入市场,只是很多台湾人永远都无法意识到这幺简单的道理。假若 AMD 没吃掉 NexGen,慢慢「琢磨」原始的 K6,恐怕今天也看不到在 x86 处理器市场跟英特尔分庭抗礼的 AMD。
总之,回顾过去,AMD 这 8 亿 6,500 万美元真的没有白花,能用金钱买到可充分利用并创造更多价值的时间,永远是最划算的生意。至于花钱当冤大头又买不到时间甚至还歹戏拖棚的,就不值得我们浪费记忆体空间回想了。咦,怎幺有点眼熟?