当 IBM 的庞大研发队伍落在后面时,Seymour Cray 却在林地实验室里交出了算力巅峰
1963 年,IBM 董事长 Watson 质问为何 CDC 仅 34 人的实验室抢先发布最快计算机。6600 以紧凑布线、PPU 和记分板提高速度;SIPROS 延期则暴露了系统交付的代价。
CDC 6600 与 Seymour Cray。封面插图,AI 生成(Illustration, AI-generated)。
1963 年夏天的总裁备忘录
1963 年 8 月 28 日,IBM 董事长兼首席执行官小托马斯·沃森(Thomas Watson Jr.)签发了一份内部备忘录。
备忘录写道:CDC 刚宣布 6600;据沃森了解,开发实验室连清洁工在内只有 34 人,其中 14 名工程师、4 名程序员。与 IBM 庞大的研发活动相比,他难以理解为什么对方抢先推出了当时最强大的计算机,并要求在珍妮湖(Jenny Lake)会议上优先讨论 IBM 哪里出了问题、该如何立即改变。
沃森写这封信时,IBM 刚经历过一次失利。
两年前,IBM 的超级计算机 7030(代号 Stretch)未能达到预期效果。立项之初,IBM 承诺的性能至少是上一代 704 的 100 倍。结果,到 1961 年实测,实际速度约为 704 的 30 至 40 倍。
1961 年 5 月,IBM 将 Stretch 从后续销售目录撤下。据IBM 的 Stretch 历史档案,其价格从 1350 万美元降至约 780 万美元,低于成本;最终只有九台投入使用。

IBM Model 7030 "Stretch" 操作控制台(机型于 1961 年交付,现藏于美国计算机历史博物馆)。Photo by The wub, CC BY-SA 4.0, via Wikimedia Commons.
两年后,位于明尼苏达州的 CDC 发布了性能约为 Stretch 三倍的 6600。
据计算机历史博物馆的年表,控制数据公司(Control Data Corporation,简称 CDC)发布的 CDC 6600,每秒可执行约 300 万条指令(约 3 MIPS)。
据计算机工程师戈登·贝尔 1989 年的回忆,6600 总设计师西蒙·克雷(Seymour Cray)认为,沃森在备忘录中已经回答了自己的问题。
沃森在信里列出的团队规模,说明了两家公司在这项机器上的投入方式不同。
10 英尺线缆与光速硬约束
IBM 拥有更大的研发队伍,但当时更快的机器仍然属于CDC。
CDC 6600 的基础主频为 10 MHz,一个时钟周期为 100 纳秒。计算机的速度到了这个级别,信号传播延迟已成为必须纳入计算的设计约束。
在真空中,光一纳秒大约能走 30 厘米。桑顿在原著第 31 页记载,6600 的机箱间同轴电缆每英尺传播约需 1.5 纳秒,折合每纳秒约 20 厘米。
在 100 纳秒的时钟窗口里,门电路要翻转,电平信号要爬坡建立,寄存器还要留出足够的建立时间把数值稳稳锁存。一条 10 英尺的机箱间电缆,连同驱动电路,从输入到输出约要 25 纳秒,已经占去四分之一个时钟周期。
在 100 纳秒的周期下,过长的连接线会增加传输延迟。桑顿在设计论述中把缩短机箱间线缆距离列为采用紧凑布局的理由。
克雷与硬件架构师吉姆·桑顿(Jim Thornton)因此采用紧凑的机柜布局,尽量缩短机箱之间的连接距离。

西蒙·克雷(Seymour Cray),身后是后来的 Cray-1。Photo by Michael Hicks, CC BY 2.0, via Wikimedia Commons.
整台机器被折叠成了一个十字形(Plus Sign)。四个机柜翼面以极近的距离包围着中央底板,所有的逻辑插件向内折叠,硬生生把走线距离压缩在中心区域。
据CDC 模块手册,机箱之间的同轴电缆统一做成 10 英尺长,以便各机箱使用同步时序信号。
长线走法,被这套 10 英尺的统一规则取代了。

CDC 6600 十字形(Plus Sign)机柜布局示意图,模块向中心折叠,以缩短导线长度。3D rendering by FlyAkwa, CC BY-SA 4.0, via Wikimedia Commons.
奇珀瓦福尔斯林地与散热难题
6600 的硬件设计并非在 CDC 的明尼苏达总部完成。
1962 年,CDC 在克雷的家乡威斯康星州奇珀瓦福尔斯(Chippewa Falls)设立了实验室,继续研发 6600。克雷此前在明尼苏达州的总部工作。
克雷后来在史密森尼学会的口述访谈中说,远离总部能减少客户拜访和非技术事务的打断,让他继续亲自做技术工作。
这座实验室就是备忘录里提到的那个 34 人的团队,有 14 名工程师、4 名程序员,其余为技术和辅助人员。
空间急剧收缩带来的直接惩罚,是令人窒息的热量。
6600 使用了仙童半导体(Fairchild)开发的高速硅晶体管。全机约 40 万颗晶体管,逻辑模块采用双层电路板夹成的立体搭棚结构(Cordwood Module)。
密集排列的晶体管产生了需要持续移走的热量。

CDC 立体搭棚模块(Cordwood Module),原图说明仅称可能属于 6000 系列,未确认具体型号。Photo by Bubba73, CC BY-SA 4.0, via Wikimedia Commons.
在如此紧密的封装中,团队采用了导热板与制冷系统,而不是只依赖机房空气循环。
团队设计了一套极其大胆的机身循环冷却方案。
据计算机历史博物馆对 6600 的介绍,模块的热量经金属冷板传入氟利昂循环系统,再通过换热器传给外部冷冻水。
冷却系统还需控制设备表面温度,避免凝露。
这套氟利昂制冷方案,帮助机器在高密度封装下运行。
剥离 I/O,让 CPU 专注计算
除了线长与散热,6600 的架构也对 I/O 工作进行了分工。
6600 将外围设备的 I/O 与中央处理器的科学计算分开。
外围处理器负责设备控制与部分系统管理工作。
桑顿在回顾 6600 架构的论文中,将 I/O 与中央处理器分离列为设计中的关键步骤。
这让中央处理器无需直接处理外设 I/O。
中央处理器没有面向外设的 I/O 指令,也不直接响应外设的中断;但它仍执行分支、访存与算术等指令,并可由 PPU 发起交换跳转来切换任务。
所有与外界打交道的脏活累活,全被扔给了机框内 10 个独立的外围处理器(Peripheral Processing Units,简称 PPU)。
据桑顿原著,每个 PPU 都有 4096 个 12 位字的专属磁芯内存和 18 位累加器。它们处理穿孔卡片、磁带等外设的 I/O,也能通过交换跳转(Exchange Jump)切换中央处理器的作业状态;状态信息保存在 16 字的交换包(exchange package)中。
为了避免在底板上重复铺设 10 套昂贵的硬件,克雷玩了一手极为漂亮的桶形轮转(Barrel Processor)。
10 个 PPU 物理上共享一套算术、逻辑和数据分配电路。底板每过 100 纳秒就将寄存器推进一格,轮流接入计算。每个 PPU 每 1 微秒获得一次计算时隙,硬件用量却大幅减少。

CDC 6600 完整主机系统,前景为双屏幕操作台,背景为十字形主机柜。Photo by Jitze Couperus, CC BY 2.0, via Wikimedia Commons.
在指令设计上,6600 采用 60 位字长,指令有 15 位和 30 位两种长度,控制逻辑采用硬连线实现,而非微码实现。
据桑顿原著,中央处理器的浮点和布尔运算以寄存器为操作数,部分地址增量指令也可使用指令中的常数。向特定的 A 寄存器写入地址,会触发对应 X 寄存器与内存之间的数据传输。曾使用 6600 的 NCAR 在设备回顾中提到它只有 65 条指令,并将其称为 RISC 一词出现前的 RISC 计算机。
记分板与功能单元并行
桑顿还设计了中央处理器内部的并行执行机制。
在 6600 的指令集里,不同算术部件的耗时天差地别。据桑顿原著中的指令时序表,增量和布尔运算只要 3 个时钟周期,浮点加法需要 4 个周期,乘法需要 10 个周期,而一条浮点除法要整整耗掉 29 个周期。
在传统的单运算部件串行结构下,程序只能按顺序单行执行。只要前面横着一条慢吞吞的 29 周期除法,后面哪怕跟着十条毫无关联的加法或布尔运算,全得原地熄火等待。
桑顿在 1970 年的专著《Design of a Computer》中完整阐述了破局点。
中央处理器有 10 个独立功能单元:分支、布尔、移位、定点加法、一个浮点加法器、两个浮点乘法器、一个浮点除法器,以及两个地址增量单元。它们可并行运作。
为了协调这 10 个功能单元,桑顿设计了记分板功能(Scoreboard)。
记分板就是一套纯硬件的交警。它在时钟边缘检测每一个功能单元的空闲状态,以及目标寄存器是否存在读写冲突。
按桑顿原著第 125–127 页对记分板的描述,指令按程序顺序依次发射。如果除法器正忙着啃一条 29 周期的慢除法,而下一条移位或布尔指令与除法结果毫无关系,所需的功能单元又空闲,记分板就让它发射,在旁边空闲的单元里先跑完,把结果先写回。如果下一条指令要用的单元正忙,或目标寄存器已被占用,发射就会暂停。
这是最早投入商用的、由硬件动态调度多个功能单元并行执行的机器之一。对于互不依赖的指令,记分板能在运行时安排执行,减少因慢指令造成的等待。这套机制成为后来乱序执行技术的早期范例。

CDC 6600 双圆形 CRT 屏幕操作控制台细节(现藏于美国计算机历史博物馆)。Photo by The wub, CC BY-SA 4.0, via Wikimedia Commons.
神话背后的软件交付难题
沃森备忘录中的 34 人,只是克雷所在实验室的人员规模。据设计参与者桑顿的论文,首台 6600 于 1964 年 10 月交付;要让客户用上完整的系统,操作系统还得跟上。
软件工作不只是把程序装进中央处理器。6600 的中央处理器不直接处理外设 I/O,10 个外围处理器(PPU)承担这项工作。操作系统还要安排作业、分配设备、协调数据传输,并在不同作业之间切换中央处理器。
CERN 的一份系统论文描述了一个具体过程:作业请求输出时,管理程序要找到空闲的 PPU 执行 I/O,还可能通过交换跳转让中央处理器去运行另一项作业。CDC 工程师在1964 年介绍操作系统 SIPROS(Simultaneous Processing Operating System)的论文中也指出,硬件对这些处理器的配合方式限制很少,整套机器如何工作,很大程度取决于操作系统的组织。
SIPROS 原计划让多项作业同时推进,却没能按时交付。CERN 的 6600 于 1965 年 1 月抵达,从 5 月起先靠不支持分时处理的临时系统提供服务。CERN 当年的工作报告记载,作业周转变慢、队列积压;CDC 随后交来的 SIPROS 初版仍不完整,也未完成调试。
CERN 1966 年的报告列出了后续工作:CERN 与 CDC 当地支持人员接手改造,把执行管理、作业装载、磁带和 I/O 等部分重写或补齐,CERN 版 SIPROS 才逐步替代临时系统。早期硬件可靠性问题还压缩了软件开发的机时,程序员也需协助排查故障;这一点在CERN 前一年的报告中也有记录。
NCAR 的设备史记载了类似处境:CDC 当时提供的两套系统都无法通过 NCAR 的大部分测试程序,NCAR 因而开始开发自己的操作系统。
幽灵机阻击与销毁索引的和解
诉讼史料中的 IBM 型号年表记载显示,IBM 于 1964 年宣布高端 System/360 Model 92,但未给出交付日期。根据《Computers and Automation》1968 年的报道,CDC 董事长威廉·诺里斯称,一些原本考虑购买 6600 的客户因此推迟下单,想先了解 IBM 的新机;IBM 则否认自己的产品预告异常提前。
IBM 的型号年表显示,Model 92 最终未按原型号交付,经过调整后的 Model 91 直到 1967 年才首次交付。CDC 于 1968 年起诉 IBM;1969 年的法院文件表明,提前宣布产品只是 CDC 提出的多项排挤竞争指控之一。双方于 1973 年庭外和解,IBM 将旗下的数据处理服务公司 Service Bureau Corporation(SBC)出售给 CDC;这项安排也见于美国司法部的回顾材料。
和解又牵出另一宗 IBM 反垄断案。美国司法部关于索引销毁的文件说明,CDC 的律师在多年取证中,把大量文件编成带注释的计算机检索索引;司法部已用它准备自己的诉讼。双方的和解协议要求销毁诉讼工作成果,这套索引也随之被毁。
在1973 年联邦法院的判决中,IBM 主张索引属于律师的工作成果,不受另一宗案件证据保全令的约束。法院未接受这一抗辩,认定 IBM 促成索引销毁,违反了保全令。这个裁定针对证据保存,并未判定 CDC 对 IBM 的垄断指控成立。
工程的重量
跳出那个流传了数十年的神话故事,真实的历史其实远比任何传说都要残酷而清醒。
在硬件层面,克雷与桑顿用紧凑布局和标准长度的线缆控制传输延迟,用氟利昂制冷处理密集封装的散热,再用记分板协调多个功能单元并行执行。
但随后的全部历史同样表明,计算机系统工程从不相信单纯的英雄叙事。
硬件把外设交给 PPU 后,客户仍需要可用的操作系统。CERN 的经历说明,机器安装、软件交付和稳定运行之间仍隔着大量工程工作。
CDC 6600 的传奇历经半个多世纪依然厚重。这群工程师老老实实服从了物理定律,撕开了超算的黎明,并承受了随之而来的全部系统工程重量。