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 系列的开发。