处理器微结构史话 第二章
【注:本文将刊登在中科院计算所计算机体系结构国家重点实验室的内刊《体系结构国重快讯》第七期。】
美国海军密码破译团队出身的ERA,与第一台通用电子计算机 ENIAC 的主要设计者 John Mauchly 和 J. Presper Eckert 坐镇的 UNIVAC ,这两支团队的先后加入的确令 Remington Rand 暂时超越了 IBM ,领跑整个市场[Rand vs IBM,1]。然而一山难容二虎, ERA 与 Eckert-Mauchly 团队愣是擦不出火花,研发团队的管理者Norris与ERA团队部分核心成员最终选择出走创办 CDC 公司,也不由得令人扼腕叹息。在开始讲述 CDC 6600 同时开创超标量设计与乱序执行两大里程碑技术的传奇故事之前,让我们再来回顾一下 Remington Rand 的落日余晖。
第一章中讲到,正值 Remington Rand 凭借着 UNIVACⅠ 型计算机的卓越表现而一马当先春风得意之时,庞大而笨拙的 IBM 也缓慢地点燃了自己的前进引擎。从 1940 年开始,IBM就在生产一些制表机(Tabulating Machine),毫无疑问地, IBM 也是尝试推动计算装置电子化、数字化的先驱者之一,但是尚不完全明朗的商业市场前景令 IBM 犹豫不决。直到 1951 年, IBM 的内部讨论仍然认为通用电子计算机的市场前景黯淡,可能市场容量仅有几十台规模[Rumour]。
拖拖拉拉的试水之作 IBM 701 型计算机直到 1953 年才进入量产环节,紧接着的,却是意料之外的热卖。一年后,这台比 UNIVAC Ⅰ 快了足足十倍的新型计算机现身于劳伦斯·利弗莫尔国家实验室里,负责为 UNIVAC Ⅰ 编程的工程师们就开始坐不住了。由 John Mauchly 和 J. Presper Eckert 两位宗师级人物主持设计的 UNIVAC Ⅰ 是这间驰名全球的核武器实验室所购买的第一台计算机,当时交付使用才仅仅一年,这群工程师不久前刚刚在 Remington Rand 接受了为期三个月的培训,学习如何操纵 UNIVAC Ⅰ 。值得一提的是,在计算机行业雏形初现的年代, UNIVAC Ⅰ 的地位犹如镇宅之宝般金贵,新工程师通常需要经过为期三个月的安全检查才能接触到编程手册,不难想见这群刚刚上手操纵 UNIVAC Ⅰ 的人也绝非阿猫阿狗之流,但是 IBM 701 的到来令他们迅速输掉了骄傲的本钱,在那个高级语言尚未诞生的年代里,每行代码的编写和测试所需要的时间是现在难以想象的,转向新机器与新指令集的学习成本和人力成本都远比现在高昂,他们开始担心性能强劲的 IBM 701 加入实验室后将导致自己刚学到不久的技术受到冷落,令自己失去工作。
当时的实验室员工 Tad Kishi 在自己三十年后的回忆文章中写到:实验室里的工程师们分化成了 IBM 与 UNIVAC 两大派别,这是他第一次也是唯一一次在实验室里看到有一群人因为害怕失去工作而拒绝与同事分享信息[Tad Kishi]。 IBM 的新型机器所建立起的性能优势,从 UNIVAC 工程师们的心理阴影当中可见一斑。
UNIVAC Ⅰ 于 1951 年发布,一时风头无俩,但两三年时间便风光顿敛,面对 IBM 的后发制人的首轮进攻即告溃不成军,而 UINIVAC Ⅱ 则直到 1957 年才面世,中间足足有 6 年的空窗期。这期间到底发生了什么事?
(图注: Reminton Rand/Sperry Rand 公司的电子计算机产品线。不难看出, ERA 与 UNIVAC 两大研发团队虽然共享 UNIVAC 的牌子,却是在研发上各自为战,没有交集)
IBM开始在市场上攻城略地的时候,与 Eckert-Mauchly 原本相互独立的 ERA 并没有对危难中的东家坐视不管。当时的 ERA 正在保密状态下为军方构建新型计算机,这个项目的成果在 1952 年获准发布解密版本, ERA 雪藏的剑锋便陡然出鞘。当ERA将这一项目的成果向 Remington Rand 管理层汇报过后, Remington Rand 的高管们震惊了,“低等生物”明尼苏达人竟然不声不响地拿出了一台可以与 IBM 701 相抗衡的新机器,这让 Remington Rand 在慌乱中看到了反击的曙光。 1103 系列不出意料地独挑大梁,在市场上挂着 UNIVAC 1103 的番号攻城掠地,成为 Remington Rand 在这六年的空窗期中主要的反击筹码[UNIVAC 1103,1]。尽管销售量与 IBM 701 型并驾齐驱的 UNIVAC 1103 已经尽力防守 Remington Rand 的市场阵地,但是与 IBM 7 系列机器浑厚坚实的研发后劲相比, Remington Rand 已经开始无力以相同的步伐快速更新自己的产品线,尤其在 1955 年到 1958 年这个时间段里, IBM 的 7 系列机器实质上已经没有强力对手可与之抗衡。
在此期间, Remington Rand 的管理混乱问题也开始浮出水面。虽然独具慧眼地收购了 Eckert-Mauchly 与 ERA 两大团队,但 Remington Rand 的管理层却没能够将它们高效地整合在一起,事实上这两支团队与 Remington Rand 下属的其他团队一样,处于各自为战首尾不能兼顾的状况, Eckert-Mauchly 被指派给商业通用市场,而 ERA 则主攻高性能科学计算,两支团队向不同的上级部门报告,信息直到 CEO 的办公桌上才能汇总,在这种情况下,如果有一位能够统揽全局的 CEO , Remington Rand 公司还是回天有术的,可惜当时的 CEO James Rand 被多方史料统一评价为领导才干不佳,强敌来攻而 CEO 应对无能的危急时刻,团队之间也出现了离心离德,本该成为 Remington Rand 救命稻草的 UNIVAC 1103 却被身为同门的 Eckert-Mauchly 团队反对进行市场推广,因为害怕影响到 Eckert-Mauchly 团队设计的 UNIVAC Ⅰ 的形象![Rand vs IBM,2]
(图注:UNIVAC 1103 ,图片来源ed-thelen.org)
也许是一丝自知之明的觉醒, Remington Rand 意识到自己即便穷尽手段也已无法和 IBM 的对抗,于是接受了 Sperry 公司的并购,二者于 1955 年合力形成的新公司名为 Sperry Rand ,而原本独立的 ERA 与 Eckert-Mauchly 两支团队也终于合并到 UNIVAC 部门的统一旗帜下,老练精干的 ERA 领导人 Norris 在高层的期望下,成为 UNIVAC 部门主管。用时下流行的一句话来说:然而并没有什么卵用, ERA 与 Eckert-Mauchly 两大研发团队的冲突已经“形成了一种模式”[Rand vs IBM,3],即便是见多识广的 Norris 也感到难以驾驭。
在 UNIVAC Ⅰ 之后, Eckert-Mauchly 的人马开始进行名为 UNIVAC LARC 的新型计算机研发,不幸的是, Eckert-Mauchly 此前的“光荣传统”在新项目上“再创新高”,有心的读者可能还记得史话第一章中曾提到, Eckert-Mauchly 在 UNIVAC Ⅰ 的研发上开销超支了五倍、把本该在两周内交付的输入输出设备拖延了两年之久,令客户通用电气公司大发雷霆,而这回 LARC 的研发再度超支 6 倍,超时两年零三个月,产品硬生生地拖到了 1960 年才上市售卖。之前 UNIVAC Ⅰ 型计算机的研发虽然不顺,但上市后毕竟一度热销,所以最后还是能给 Eckert-Mauchly 作出一个“瑕不掩瑜”的正面评价,而 LARC 因为性能优势过于微弱,只卖出了区区两台,这就无论如何捂不过去了[UNIVAC LARC]。
ERA 团队的处境也不妙, ERA 在 1103 机型之后被指派去开发 UNIVAC Ⅱ ,事实上是当了 UNIVAC Ⅰ 的接盘侠,因为 UNIVAC Ⅱ 要在 UNIVAC Ⅰ 的基础上改进,而 Eckert-Mauchly 团队寄来了 UNIVAC Ⅰ 的样机和工程手册之后便撒手不管,以“看热闹不嫌事儿大”的态度放任 ERA 团队独自理解其内部构造,直到 UNIVAC Ⅱ 磕磕绊绊地在 1957 年接近完成时才在管理层压力下派来三个工程师给予协助,有了这样令人瞠目结舌的窝里斗行径,便不难理解为何 IBM 在市场上一骑绝尘了。 UNIVAC Ⅱ 面世之后也仅卖出不超过三十台,而同时期的 IBM 705 售出了 175 台,已成摧枯拉朽之势。
屋漏偏逢连夜雨,船破又遇顶头风。 Eckert-Mauchly 团队负责的 LARC 研发难产问题还没解决, Norris 在 UNIVAC 主管的新位置上甚至都还没有坐热, CEO James Rand 就将自己的兄弟 Marcel Rand 横插进来,夺走了市场营销方面的决策权,这还不算完,这位 CEO 的血亲又从贝尔实验室请来一位退休管理层负责“协调产品研发“,这样一来 Norris 就已等若架空,甚至连为 ERA 旧部争取足够研发经费的建言都被高层多次回绝,还有什么理由留下呢?
1957 年 7 月, Norris 带着一部分对老东家已经失望透顶的 ERA 团队成员毅然辞职出走,尝试筹集 60 万美元的启动资金来创办自己的新公司,自己来主宰自己的命运。试图撬动历史的车轮的举动是免不了要费力的,资金募集的过程起初异常艰难, Norris 与妻子一道,以破釜沉舟的决心砸锅卖铁投入了七万五千美元的家庭资产,还说服自己的医生朋友投入了两万五千美元,拖家带口积蓄不多的创业员工们认购了一万五千美元的股份。饶是如此,距离目标仍然相差甚大,最后不得不发动各方人脉,以一美元一股的价格吸引了 300 位股东参与,终于凑齐了数目。在明尼亚波利斯市区 501 公园大道的一间旧仓库里,书写了微结构发展史上传奇一章的 Control Data Corporation 诞生了[CDC, 1]。
CDC 初创的经历十分曲折,种种内忧外患接踵而至。这间旧仓库是当地一家报社用来印刷报纸的,堆满了纸筒,在里面工作的员工经常要忍受印刷噪音的困扰。而这间旧仓库开门迎接 CDC 员工们的第一天, CDC 所圈定的主架构师却没有出现。由于 Norries 领导的 ERA 团队前身来自于美国海军的密码破译团队,随后又为军方开发新型计算机[UNIVAC 1103,2],因此军方点名要求一部分关键成员不得离开 UNIVAC 部门以保障军方项目顺利进行,这其中就包含了明尼苏达大学应用数学专业硕士毕业后在 ERA 团队供职,当时年仅 32 岁的 Semour Cray ,日后业界共尊的超级计算机之父。不要忘了,在 Eckert-Mauchly 的 UNIVAC Ⅰ 被 IBM 的 7 系列机器打得溃不成军的时候, Remington Rand 的阵营里唯一能顶住进攻的是 UNIVAC 1103 ,而 Semour Cray ,就是 UNIVAC 1103 的控制系统设计者。面临军方压力的 Norries 不得不告诉 Cray 暂时不要加入 CDC 公司,以稳住军方,否则 CDC 公司将不复存在。 Semour Cray 不情愿地留在了 UNIVAC ,直到两个月后,军方已经不再需要他了,他发现账务中自己的项目已经被列入了“杂项”之下,加盟 CDC 的绿灯才终于亮起[CDC,2]。
(图注: Semour Cray 和他那句日后在高性能计算领域反复提及的名言)
Semour Cray 在 CDC 公司的经历,是不能用“如鱼得水”这样轻柔的词汇来形容的,用“猛虎下山”似乎更为恰当一些。身为 CDC 公司 CEO 的 Norries 很快发现, Semour Cray 决不是一个自己能够驾驭得了的普通工程师[CDC, 3]。从股本上来说, Semour Cray 仅为 CDC 的募股投入了五千美元,这是他当时仅有的个人资产,股份比例远没有 Norries 来得高,但是 Semour Cray 对早期 CDC 的技术决策却拥有压倒性的话语权, CDC 起步后第一个重大决定 —— 全力研发面向科学计算的高性能计算机就是 Cray 一力促成的,这也是 Cray 的拿手好戏。
灵魂人物迟了两个月终于归队,但挡在 CDC 面前的障碍仍没有被扫清:缺钱。 CDC 不是花钱如流水的 Eckert-Mauchly ,作为参照, LARC 项目的报价为 285 万美元,这几乎五倍于 CDC 的总资产。如何在极为紧张的预算下研发一台在市场上足够成功的计算机,成为了萦绕 CDC 团队每个人心中的难题。好在,这是一只由 Semour Cray 带领的王牌团队。 60 万美元无论如何无法支撑太久,初创的 CDC 又没有政府和军方的扶持,于是 CDC 的员工们仅从公司领取自己的半数薪水以期盼它走得更远。 Semour Cray 购买了一大堆被生产线上淘汰下来的废品晶体管来制作新型计算机所需的电路,因为这种晶体管的售价是最便宜的,每个只卖 37 美分。
这一堆极为廉价的晶体管有着与它们的售价十分匹配的糟糕电气特性, Semour Cray 硬是找到了自己的办法用这种最次的晶体管构建出比别人更快的电路,但是很快,这种废品晶体管就被买完了,但是 CDC 又买不起合格品,于是 CDC 的员工们就想办法请元器件公司的销售代表来 CDC 的工作地点吃午餐,然后拿着他们带来的用于销售演示的免费赠品晶体管来搭建电路[CDC 4]。
在这种境遇下, CDC 坚持了三年时间,直到 1960 年,这台诞生自废品晶体管的计算机正式面世。它被命名为 CDC 1604 , 1604 = 501 + 1103 , 501 是 CDC 的最初工作地点,明尼亚波利斯市区 501 公园大道的编号, 1103 是他们的上一代产品,那台能够阻击 IBM 701 的 UNIVAC 1103 。
(图注: Semour Cray 与 CDC 1604 ,图片来源于 Charles Babbage Institute )
CDC 1604 在市场上取得了相当的成功,虽然在性能上它无法与 IBM 7 系列的最新型号 IBM 7090 相提并论,但是它价格低廉,设计简洁,因此颇受欢迎。这从一个有趣的事例中可以得到印证。劳伦斯·利弗莫尔国家实验室的两位程序员在外参加会议时偶然见到了 CDC 1604 的指令手册,立刻为其指令集设计的简洁而倾倒,于是劳伦斯·利弗莫尔国家实验室便购买了一台 CDC 1604 ,这一下令 IBM 如鲠在喉,因为劳伦斯·利弗莫尔国家实验室从 1954 年到 1961 年马不停蹄地连续购入了二十台计算机,其中十九台来自 IBM ,包括 IBM 701,704,709,7090,7094,7030 ,眼看就要凑齐7系列全家福,结果被一台 CDC 1604 坏了好事。 CDC 1604 是第一台面向科学计算的晶体管计算机,在这个市场上获得的初步成功让 CDC 度过了艰难的初创期,开始有可观的利润,也为下一代产品的研发奠定了基础。
这里就不得不重提一下核武器实验室的影响力了。在早期计算机的发展中,劳伦斯·利弗莫尔国家实验室和洛斯·阿拉莫斯国家实验室成为了非常重要的推动力量,随着我们的故事线推进,这两间实验室还会持续不断地出镜。因为原子弹的实战爆发力惊世骇俗,令美国政府和军方如痴如醉,无奈原子弹实地试爆的政治压力太大,试爆过程中的超高温和超高压又大大限制了科研观测手段,因此购买高速电子计算机进行核爆模拟就成了极具诱惑力的选项。承接核武库的研发任务之后,这两个实验室成为早期计算机的重要买主,甚至在某些型号上占据一半购买量,间接推动了计算性能的飞速提高[Los Alamos and Lawrence Livermore]。甚至当时有一个笑话说,一台 IBM 7094 在运输过程中从卡车上翻出,跌下了悬崖,但是这台机器坠落到悬崖底部之前,下一台机器就已经运到了。
当时的计算机单价基本在数十万美元至数百万美元的区间上,从近乎疯狂的购买中不难发现这两家实验室获得的资金支持规模有多么庞大,因此两个实验室是各方争夺的重要客户,每一台机器的订单都是一块令所有人垂涎的肥肉。当时的计算机市场被分为两个大块,其中一块被称为商务市场(business market),这一块市场对性能要求不高,但是需要计算机支持一系列处理字符串和各种规格数据的指令,因此早期计算机,例如第一个获得市场认可的 UNIVAC I ,就是采用一套比较复杂的指令集编码,后来被称为 CISC ;另一块被称为科学计算市场,市场规模要小很多,重要早期客户就是这两家核武器实验室,这一块市场随后演变为今日我们所说的高性能计算市场,它的特点是对计算速度(主要为浮点计算)有着极高要求。这也是 Semour Cray 所钟情的地方。
Semour Cray 是一个为高性能计算而生的人。他从骨子里开始狂热地追求至高的计算速度,不惜一切代价,包括兼容性[CDC,5]。这一价值观刚好符合核武器实验室当时的胃口,他们挥金如土,极度渴求更快的计算速度,至于兼容性,只不过是随时可以牺牲的附件。而 CDC 的管理层包括 Norris 在内,都没有这份执拗, Norris 认为 CDC 应该趁热打铁进攻商务市场获取更高利润,而商务市场上很难接受一个新型计算机不兼容以前的软硬件,而计算速度又不是商务市场的痛点。这使得刚刚成立不久的 CDC 内部开始出现分歧,以 Norris 为代表的管理层指派了另一个小组开始开发 CDC 3600 ,这台机器以 CDC 1604 的继任者身份出现,与 CDC 1604 部分兼容,使用复杂指令集设计,旨在打入商务市场。而 Semour Cray 则开始尝试设计二十倍性能于 CDC 1604 的超高速计算机,编号 CDC 6600 ,力图做到世界第一。如果有人正在好奇,如果 CDC 1604 使用的元器件不是废品, Semour Cray 和他的团队能把速度提到多快, CDC 6600 的目标就是答案了。但最高速度的代价也是十分高昂的。 Semour Cray和他带领的工程师团队们重新审阅了CDC 1604的设计图纸,认为单纯凭借改良 CDC 1604 的设计将无望达成目标,于是 CDC 1604 的设计被完全抛弃, CDC 6600 的设计从一张白纸重新开始,完全不兼容前代产品。这意味着, CDC 6600 一旦失败,将会是完全没有退路的惨败。
与此同时, Semour Cray 与管理层的关系正在逐步恶化。 1962 年, Cray 与追随他的工程师们[CDC,6]搬到了自己的出生地,威斯康辛州的奇珀瓦福尔斯市(Chippewa Falls)[Wisconsin]。从明尼苏达搬去威斯康辛的决定有多重因素的影响[CDC,7],管理层决定上马 CDC 3600 的计划不可避免地对 Semour Cray 造成了压力,如果 CDC 6600 失败,将意味着 Semour Cray 的话语权被削弱,另一方面是来自公司行政,以技术能力见长的 Semour Cray 一生都背着不善与管理层打交道的名声,他厌恶参与公司管理,需要与 CDC 总部拉开一段距离来保证自己不受公司行政事务干扰,搬去威斯康辛的一百英里距离从某种程度上来说刚刚好,这个距离足以令一些闲杂事务望而却步,但是一旦有紧急事务,总部还是能够找到他。这种对管理层的轻视还体现在其他方面,当 Norris 要求 Semour Cray 做出公司五年的技术目标和规划时,他只回复了两句话:总体目标,构建世界上最强大的计算机,第一年目标,完成前述目标的五分之一。但总的来说, Semour Cray 与 Norris 之间仍然有着相当程度的相互理解,搬迁的决定就得到了 Norris 的认可。
(图注: Chippewa Falls 当地留下的印有 Cray 字样的标志。来源chippewa.com)
奇珀瓦福尔斯实验室(Chippewa Falls Lab)建立后, Semour Cray 身上的压力并没有因此缩减多少,因为 CDC 3600 已经于 1962 年下半年上市,并且得到了劳伦斯·利弗莫尔国家实验室的订单。一旦 CDC 6600 失败,后果将不堪设想,轻视管理层的 Semour Cray 在外人眼中看来将不仅仅是傲慢,而且是无能。
但 Semour Cray 又如何会轻易低头,他毫无惧色地坚持了自己最初的目标。新设计将抛弃 CDC 1604 上使用的锗基晶体管,转而使用仙童半导体刚刚出品不久的硅基晶体管,这种晶体管将提供快五倍的开关速度,使得电信号通过晶体管组成的逻辑门时耗费的时间大大缩减。晶体管切换速度提高后,连线延迟又成了问题, CDC 6600 内部的电线极为庞杂,总长度以英里计算,在高速时钟驱动的电路里,即便电信号以原光速传播,也无法达到时序要求,据估计当时的计算机内部关键处理路径上有 25%~30% 时间浪费在了线上电信号传输[CDC,8],为此 CDC 6600 将所有的电路板元器件密度提高了十倍以缩短总连线长度,但是这样一来,散热就成了问题, Semour Cray 又找来了一位以前从事电冰箱制冷系统设计的工程师,为 CDC 6600 设计了一套基于氟利昂的散热系统!
(图注: CDC6600 的结构框图,出处见Uniprocessors and Vector Processors)
使用新的器件带来了五倍的速度提高,这使得 CDC 6600 内部的指令调度单元能够以 100 纳秒的时钟速度朝算术逻辑单元发射指令,这一速度已经足以傲视群雄,但是相距设计目标仍有一段不小的距离。时钟节拍只是一方面,另一面来说,每个时钟节拍当中完成的工作量能不能有所提升呢? Semour Cray 和他的团队将目光投到了机器的体系结构上。一个直观的想法是,如果中央处理单元内部集成数目较多的运算部件,同时进行多次运算的话,速度也可以成倍提高。工程师们分头设计集成了十个运算部件,加法,乘法,除法,移位,逻辑,分支,一应俱全,这些计算部件计算一次需要 300~400 纳秒,理论上可以重叠执行 3~4 条指令,速度便提高 3~4 倍,但是这一速度优势仅仅是镜花水月,在实际执行流程中会打上很大折扣。
考虑这样的一个四则运算序列 (1114 + 303)× 520 ,在我们算出 1114 + 303 的结果之前,是不能开始进行后续乘法计算的,这意味着我们在进行加法计算的时候,乘法单元是闲置的,如果这种运算之间的顺序在实际执行过程中不能被打破的话,多个计算单元的利用率不会有预想的那么好。这是限制多个运算单元利用率的最大桎梏之一:指令的执行必须按照一定顺序进行。从常理上看,打乱指令的执行次序是颇具一些反直觉意味的,从 ENIAC 诞生到 CDC 6600 面世之前,这一桎梏牢牢套在架构师们身上接近 20 年时间,无人能将它打破,俨然成为禁区。
然而,如果把运算序列扩充为 (1114 + 303)× 520 ÷ 601 ,就不难发现这个桎梏留下的缝隙。乘法之后的除法指令是可以执行的,也就是说同时计算 1114 + 303 与 520 ÷ 601 的结果,最后再计算乘法,这是规则所允许的,这意味着我们可以打破原定计算次序,在利用加法单元的时候还能同时利用除法单元,实现同时执行两次计算。这个简单的计算序列实际上揭示了程序指令序列中一个广泛适用而深刻的规律:指令序列中的后继指令经常不存在与前驱指令的关联性,可以与前驱指令并行执行,甚至超前执行。因此,指令的执行顺序就被打破了。只要后面的指令与前面的指令不产生相关,例如不同时占用加法器,不使用同一个寄存器,且计算所需的源数据已经产生,就可以无视原定顺序把它送入计算部件开始执行。 Semour Cray 团队中的一位天才工程师 James E. Thornton 在这一难题的攻关上脱颖而出,他设计了 CDC 6600 结构框图中的 Scoreboard 部件,使得 CDC 6600 在指令执行过程中能够动态追踪每条指令之间的相关性,发掘所有不存在相关的指令并打乱原有执行次序,将满足条件的后继指令提前发射进入运算部件。
(图注:James E. Thornton在自己的著作中绘制的乱序执行示意图)
这一优化方法被后世称为“乱序执行”,而不能做到乱序执行的处理结构则被称为顺序执行,在几乎同等条件下进行比较,乱序执行的性能往往领先顺序执行一倍甚至更多[ASPLOS'13],因此九十年代后涌现的现代高性能处理器中,大部分结构是乱序执行的坚定践行者。使用多个运算部件实现每个周期执行多条指令的方法随后演变为超标量执行,这与乱序执行一样成为现代高性能微处理器的另一项显著结构特征。以半个世纪后的现代眼光来看, CDC 6600 的结构框架并没有完整地实现乱序执行和超标量执行[CDC, 9],但是这两项伟大技术在它身上首现雏形,因此 CDC 6600 被公认为乱序执行和超标量执行两项伟大技术的先驱。 Semour Cray 带领的团队在 CDC 6600 这台堪称是天神下凡一般的机器上实现了结构设计的两项突破,值得永载史册。出于对 CDC 6600 的敬意,乱序执行中指令发射这个关键步骤的描述术语(issue)使用了 CDC 6600 设计文档中的原始称呼并一直保留至今,而负责追踪指令相关性的部件也往往被称为 Scoreboard , CDC 6600 也被体系结构领域影响力最大的教科书《计算机体系结构:量化研究方法》收录,作为后世的学生们研习乱序执行设计的第一个范本,关键部件 Scoreboard 的设计者 James E. Thornton 也由此一举成名,于 1994 年将体系结构领域最高奖 Erkert-Machuly 奖收入囊中。
有了这一大段赞誉之词后,笔者仍旧认为 CDC 6600 的设计者们超越时代的透彻洞察力没有被完整描述,甚至有些尚未被已经浩如烟海的史料提及。例如,笔者在阅读由 James E. Thornton 所写,出版于 1970 年的 《Design of a Computer - The CDC6600》 时,发现它的 instruction stack 已经在相当程度上具备了 Intel 于 2010 年引入 SandyBridge 微结构的 loop cache 的功能:识别跳转指令,并尝试让每一次循环指令的取指从 instruction stack 中完成;在十个运算单元的执行后端上提供点对点的功能单元数据前递(Bypass)网络开销过大, CDC 6600 选择将运算单元分为多个集群(cluster),数据前递网络以集群为基础构建,大大降低了复杂度,而这一设计也出现在时隔 30 年后的处理器微结构经典之作 Alpha 21264 身上。
在全新的基础元器件上,如此集中地加入了这么多对当时的时代来说显得颇为超前的结构设计,使得 CDC 6600 的计算速度领先所有竞争对手第一个突破了 MFLOPS 界限,被后世公认为第一台超级计算机。 1963 年 8 月, CDC 公司召开 CDC 6600 产品发布会,同年 10 月, James E. Thornton 就与自己的妻子踏上了爱尔兰悠闲度假的旅途,而 CDC 6600 则如一支离弦利箭,迅速穿透并撕裂了 IBM 的市场防线,曾经把 UNIVAC 压得喘不过气来的 IBM 7 系列最新型号 7090 和 7094 在 CDC 6600 压倒性的速度优势面前一触即溃,兵败如山倒, 7030 Stretch 的价格更是从单台 1300 万美元暴跌至单台 780 万美元,并且早早退市。而单台售价 800 万美元的 CDC 6600 在 1970 年到来前就收到了超过一百台订单, CDC 的身价也随之直上云霄,从 1 美元 1 股冲上了 300 美元 1 股的巅峰。
(图注: Semour Cray 在 CDC 6600 发布会上。图片来源于drbobbs.com)
7 系列机器的全线溃败令 IBM 上下都感到耻辱。 IBM 董事会主席托马斯•沃森在 1963 年 8 月 28 日的一份备忘录中写道,“ CDC 6600 的开发团队一共只有三十四人,而且还包括一个守门的……这些人中, 14 个人是工程师, 4 个人是程序员,只有 1 个人有博士学位……与他们相比,我们的投入如此之巨,难以理解为何我们没能拿出最快的计算机,失去了领先地位……”。这份备忘录被后世称为“守门人备忘录”[CDC,10],CDC 6600以三十四人的小研发团队击败 IBM 的故事从此广为流传。
如同 IBM 压制 UNIVAC 一样, CDC 的领先优势之大也令 IBM 一度不知所措。耗费巨资研制,曾被寄予厚望的 7030 Stretch 根本不是 CDC 6600 的对手,而下一代机器还停留在图纸上,这可如何是好? IBM 不得不采取了一些不太光彩的营销手段来与 CDC 公司争夺客户。 IBM 的营销人员有意无意地散播谣言,夸大了 CDC 6600 的故障率,并且利用 CDC 公司的管理层人事变动声称 CDC 快要破产,机器坏了都没有地方可以返修,以此来动摇客户购买单价较高的 CDC 6600 的决心。在造谣中伤 CDC 6600 的同时, IBM 还宣称自己的新型机器 IBM 360 即将推出,性能将与 CDC 6600 不相上下,但实际上 IBM 360 当时连原型样机都没有开发完成,许多 CDC 的客户和潜在客户被 IBM 诱骗签署了购买 IBM 机器的合同。 Norris 闻讯怒不可遏,提起反垄断诉讼,倾尽全力与 IBM 的庞大律师团队周旋,而 IBM 使出了这种下三路招数之后也自觉面上无光,暗地里也在加紧 360 系列的开发。
【注释与参考文献】
[Rand vs IBM,1] 截止到两次收购前的二十世纪四十年代末期, Remington Rand 本身就已经具备与 IBM 相抗衡的实力,当时其营收仅落后IBM 9.5%左右。 ERA 与 EMCC 两支团队被 Remington Rand 收购前都有自己的电子计算机研发计划,且 UNIVAC I 型获得空前成功,笔者阅读到的几乎所有史料都认为 Remington Rand 在通用电子计算机上领先 IBM 一步起跑。 但 Remington Rand 在随后几年中没能继续巩固优势, Norris 事后评论说:他们几乎是原地不动目睹 IBM 超越了自己。
[Rand vs IBM,2] 前 Remington Rand 员工 Ronald Q. Smith 参与撰写的这篇回忆文章是本章节中许多八卦故事的出处。
[Rand vs IBM,3] 前 ERA 员工 Erwin Tomash 和 Arnold A. Cohen 撰写的回忆文章也记载了那段时间里的许多八卦故事。顺带一提, Arnold A. Cohen 是 volatile (易失性)和 non-volatile (非易失性)两个计算机体系结构标准术语的先驱,这两个术语是 Cohen 在做一场关于磁鼓内存的 Tutorial 时引入的,非易失性内存是现在体系结构学术界最火爆的研究热点之一。
[UNIVAC 1103,1] 有心的读者可能还记得,史话第一章中曾提及, 1103 开发接近尾声时 Erkert 还曾横加干涉。 1103 的性能震惊管理层一事并非笔者夸张,《 IEEE 计算历史年鉴》上先后有两篇文章独立地提及了 1103 的内部惊艳亮相,其中一篇来自[Rand vs IBM,3],另一篇则来自 Norries 的昔日顾问 James Worthy 。值得一提的是, UNIVAC Ⅰ 被认为是第一台实现了异常处理的计算机,而 1103 的后继改进型号 1103A 通常被认定为第一台实现了程序中断的计算机。中断功能是在 NSCA (也就是后来的美国国家航空航天局 NASA )请求下加入的,用来控制 UNIVAC 1103 在批处理任务和风动数据收集之间切换。
[UNIVAC 1103,2] UNIVAC 1103 实际上是这台军用新型计算机的民用版本,军用版本名为 Atlas II 。
[UNIVAC LARC] LARC 实际上是 Livermore Advanced Research Computer 的缩写。公平地说 LARC 也并非一无是处,它率先使用了interleaved memory,也就是将内存拆分为多个 bank ,实现并行交错读写,现代高性能微处理器内部的高速缓存也无一例外地使用了这种设计。例如第一代 Intel Core i7 的一级数据缓存、一级指令缓存、一级指令 TLB 和数据 TLB 、二级缓存都被切分为 4-8 个 bank 。
[CDC,1] 有史料称 CDC 是第一家以公开募股方式建立的通用电子计算机公司,见[UNIVAC 1103,1]中 James Worthy 的回忆。
[CDC,2] Cray 后来接受采访时说,他发现自己的项目被列为" 999 Miscellaenous and Other "之下,随后便安全加入 CDC 。
[CDC,3] Cray 在采访中有这样一句话(译):“ Norris 是老大,他是这样的一个领导者,就是大家感觉如果 Norris 正在做这件事,那么这大概就是可以做的。但是我不需要这个,因为我知道我自己想要干什么。这和 Norris 想要的不太一样,但是我们相处没有问题,他非常渴望看到公司成功。”
[CDC,4] 这段令人心酸的创业经历出自 Semour Cray 传记。购买废品晶体管搭建 CDC 1604 的故事得到了 Semour Cray 本人的确认,见[CDC,2]
[CDC,5] Semour Cray 有一种“从白纸开始的”设计理念,这成为他的职业生涯的标志之一,因为他主持设计的每一台超级计算机几乎都是推翻一切从头开始。 Cray 在去世前两年接受采访时也谈到这一设计理念,并总体上持正面评价,他认为这一设计理念会增大项目风险,但是可以带来长期利益。见[CDC,2]。
[CDC,6] 十四位工程师和四位程序员卖掉了自己在明尼苏达州的房子,在威斯康辛购置了新家。如此忠心耿耿地追随 Semour Cray ,可见其在工程师队伍中的人格魅力。
[CDC,7] 据 Semour Cray 传记记载,搬迁还有着躲避核弹轰炸的考虑。当时全世界已经进入冷战氛围,各国都在尝试获取核武器,以色列购买了一台 CDC 1604 ,也被认为是开发核武器的信号,因为当时的高速电子计算机一般会被作为这个用途。设计高速计算机,与两大核武器实验室关系亲密的 CDC 难保不成为大战来时的轰炸目标,而偏僻的 Chippewa Falls 被核袭击的可能性较小。
[CDC , 8] 这一估计数字来自于 CDC 6600 主要设计者之一 James E. Thornton 亲笔撰写的文章。
[CDC , 9] 准确来说, CDC 6600 未能完整实现乱序执行的遗憾在于单纯依靠 Scoreboard 不能提供寄存器重命名,使得指令乱序调度能力受限,而 Scoreboard 每个周期只能 issue 一条指令,每个周期也只能从运算部件 commit 一条指令,因此 issue width 和 commit width 都只有 1 ,整个执行流水线中只有 execution width 大于 2 ,并不完全满足超标量执行在整个处理流程中保持大于等于 2 条指令处理能力的定义。
[CDC,10] 这份备忘录被拍照传到了网上,图片原件可见 computerhistory.org
[Rumour] 参与了多个 IBM 早期计算机研发项目的 ByronE. Phelps 在自己的回忆文章中提及了 IBM 内部讨论中对潜在市场规模的担忧。然而值得一提的是,坊间流传着的所谓“ Thomas Watson 曾断言全世界只需要五台通用电子计算机”的说法也有些断章取义的味道,据 IBM 的 FAQ 文档, Thomas Watson 所说的原话大致为:“ IBM 曾经为这样的计算机(亦即 IBM 701 ,译注)制订了计划,并将这个计划送至了全美范围内的 20 个潜在客户手中,我想告诉你们的是,这台计算机租借一个月就需要 $12000 至 $18000 ,所以这不是那种可以四处热销的机器,原本以为只能卖出去五台,但是由于我们的推销,最终卖出了 18 台。”
[Tad Kishi] Tad Kishi 在这篇回忆文章中讲述了自己在 Lawrence Livermore 国家实验室参与 701 型计算机编程的经历,当中提到 UNIVAC 和 IBM 两台机器带来的内部分化。
[Los Alamos and Lawrence Livermore] 科技史作家 Donald Mackenzie 采访了 Los Alamos 和 Lawrence Livermore 两大核武器实验室的多位前雇员之后,在他的文章中系统阐述了核武器实验室在早期计算机演进中所起的助力作用。
[Wisconsin] Wisconsin 这块土地上似乎有着天生的计算机体系结构血统, CDC 公司的 Chippewa Falls Lab 开创了乱序执行和超标量执行,而 University of Wisconsin–Madison 从上世纪八九十年代以来也一直是体系结构领域的超一流牛校,旗下两大现役王牌教授 Guri. Sohi 和 Mark Hill 以及现已荣誉退休的 James E. Smith 教授都在处理器微结构领域做出过卓绝贡献。
[ASPLOS'13] 体系结构顶级学术会议 ASPLOS 2013 最佳论文奖授予了一篇研究乱序执行与顺序执行的论文,这篇论文总结先前研究认为,最顶尖的顺序执行设计也往往不及乱序执行的一半性能,但是如果把经过乱序执行调度的执行序列经过处理后喂给顺序执行处理器,则可以将差距大幅缩减至 12% ,从而有可能以低设计复杂度、低功耗的顺序执行设计提供类似于乱序执行的性能。