当年银河落九天,中国超算起步阶段的一段亲历侧记
说起来有点不好意思,我第一次听到“银河”这个名字,不是在什么严肃的学术会议上,而是在大学计算机系机房里,跟同学联机打红警的时候,旁边一个师兄指着我们那台笨重的286说:“你们这算啥,咱们学校正在参与研发一个叫‘银河’的大家伙,那东西一秒钟能算一亿次。” 一亿次,这个数字在90年代初的我们听来,跟天文数字差不多,我当时嘴里叼着饭盆里的勺子,含糊地应了一声,完全没意识到这个“大家伙”对我意味着什么。
后来阴差阳错,我还真就进了那个圈子,那时候领导把我们几个新人叫到办公室,墙上挂着一张巨大的工程进度表,密密麻麻的节点看得人眼晕,领导指着最顶上的一个时间节点说:“小伙子们,咱们现在干的活儿,就是把国家在这方面的空白给填上,别想那么多,先把眼前的电路板调通。” 这就是我对“银河”系列计算机研发的第一印象——没什么豪言壮语,就是一块板子、一根线、一行代码地往前拱。
“养一台机器比养一个娃还难”:硬件研发的土办法
很多人以为搞超级计算机,就是一群穿着白大褂的科学家在无尘室里按按钮,其实呢,大部分时间我们都在干一件特别不“高精尖”的事:排查故障,银河机的设计极其复杂,元器件成千上万,那时候还没有什么先进的自动化检测工具,我们排查故障很多时候靠的是一个现在看来特别“土”的办法——“闻味儿”。
真的,你别笑,当年带我的刘工,一个干瘦的老头,有个绝活,机器一趴窝,他先不拿万用表,而是绕着机柜走一圈,像猎狗一样抽动鼻子,他能准确地闻出是哪块板子上的电容被击穿了,或者哪个线圈因为过热把绝缘漆给烧糊了,有一次,一块内存板时好时坏,所有仪器都测不出来,折腾了我们整整一个通宵,最后刘工来了,趴在背板上听了一会儿,指着一片芯片说:“这个,换掉,它内部的键合线快断了,热胀冷缩,所以一会儿接触上一会儿接触不上。” 我们拿下来一看,外观完好无损,但换上去之后,果然好了,这种经验,写不进任何教科书,就是在日复一日的煎熬里,用时间和耐心磨出来的本能。
说到硬件,有个数据可能现在看不算什么,但在当时绝对是极限挑战,为了让大家有个直观认识,我凭记忆列了个表,看看早期银河机对工艺的要求有多苛刻:
| 指标 | 研发时的要求 | 打个生活化的比方 |
| 多层印刷电路板层数 | 高达20层以上 | 相当于在一张邮票大小的面积上,盖一栋20层的高楼,每层之间的楼道还得完全对齐 |
| 背板钻孔精度 | 亚毫米级 | 从黄浦江这头扔颗绿豆,准确砸中江对面的一颗黄豆 |
| 机房洁净度要求 | 高于医院手术室 | 人走进去感觉空气都是“寡淡”的,一根头发丝落进去都算严重事故 |
| 系统总连线长度 | 可绕地球数圈 | 光是检查这些线缆的连通性,一个小组三个人要不眠不休干上好几个星期 |
那时候,我们最怕的就是夏天打雷,一个雷打下来,电压稍微不稳,可能就有一批板子要报废,所以我们值班的人,一看到天色不对,心里就发毛,真是“养一台机器比养一个娃还难”。
软件的“针线活儿”:给巨兽注入灵魂
硬件搭起来,只是个没有灵魂的躯壳,让银河机真正“活”起来的,是软件系统,这部分工作,有点像在一头巨兽的每一个神经末梢上做针线活儿。
我们当时面对的一大难题,是如何让成百上千个处理器协同工作,而不是互相打架,这涉及到操作系统的核心——任务调度,我记得我们小组负责编译器的优化,就是把程序员写的高级语言,高效地翻译成机器能懂的指令,这工作枯燥到什么程度呢?就是我们几个人,对着打印出来的一摞摞汇编代码,一行行地看,看哪里的指令有“气泡”,哪里的循环可以被展开,哪里的数据可以被预取到缓存里。
有一次,为了把一个核心计算模块的效率提升百分之五,我和另一个同事整整两周没怎么说话,我俩就坐在背对背的桌子上,各自推演,突然,我想到一个办法,激动地大喊:“可以这样,把访存指令提前,盖掉计算延迟!” 他转过身,头发乱得像个鸡窝,眼睛里全是血丝,悠悠地说:“我刚试过了,寄存器冲突,不行。” 那种瞬间的狂喜和紧随而来的巨大挫败感,交织在一起,让人想砸键盘,但后来,我们就是在那次失败的思路上,拐了一个小弯,找到了一个更精巧的指令排布方式,最终实现了目标,那种喜悦,没经历过的人真的很难体会,它不是中彩票的那种狂喜,更像是手艺人完成了一个极其复杂的榫卯结构,严丝合缝,自己看着都觉得漂亮。
主频还是堆核?方向性的争论
在研发过程中,我们内部爆发过一次激烈的争论,我至今记忆犹新,当时,国际上流行的一种思路是不断推高单核心的主频,让单个处理器越来越快,但我们团队内部有一派人,包括我在内,认为这条路快走到头了,功耗和散热会成为无法逾越的瓶颈,必须走大规模并行处理的道路,这也就是后来的“众核”思路的雏形。
争论最激烈的时候,我们几个年轻人在会议室里拍桌子瞪眼,一位老同志忧心忡忡地说:“你们这是拿国家的项目冒险,并行编程的难度太大,到时候机器造出来,没人会用怎么办?” 我们反驳说:“主频这条路再走下去,就是死胡同,我们得让系统架构去适应未来的应用,而不是让应用来迁就过时的架构。” 总师一锤定音,拍了那个后来被证明是极具前瞻性的板,这个决定,让我们在之后的好几代产品上都受益匪浅,这个过程让我学到一点:技术的方向,很多时候不是纯粹的客观选择,它混合着洞见、勇气,还有一点点赌徒般的决绝。
(此处在实际页面中会有一张示意图)
示意图:早期银河系列计算机并行处理架构概念
我手绘了一张简单的示意图,图的中心是一个圆形的“高速互联网络”,像一张蜘蛛网的中心,周围连接着十几个小方块,代表“计算节点”,每个节点内部又画了几个小圆圈,代表协同工作的处理器,有一半计算节点在画面上方,负责处理极复杂的计算任务;另外一些节点分布在下方,负责处理大量的数据流,还有一些小方块连在网的最边缘,叫做“I/O节点”,负责与外界交换数据,这幅图想表达的就是:单个处理器可以不必是最强的,但当它们通过高速网络互联成一个整体,其潜力就非常惊人。
现在回头看,那个让我们寝食难安的编译器和调度系统,最终成了整个生态中最基础但又最核心的基石,没有那无数个不眠之夜的“针线活儿”,这台科学计算的巨兽就永远只是一堆冰冷的金属和硅片。
(此处在实际页面中会有一张资料图/照片)
资料图:早期银河计算机的核心插件板
照片里的这块插件板,算是元老级的部件了,板子上那些密密麻麻的、像迷你街道一样的细线,就是当时手工布线的痕迹,那些排列得整整齐齐的深色小方块,是早期的集成电路芯片,如果不仔细看,你可能会以为这是一块来自未来的抽象画,我记得当年为了更换其中的几个小芯片,技术员需要用一个特殊的吸锡器,在放大镜下操作,手稍微一抖,就可能把旁边的细线烫断,就是这样一块现在看来有些“粗糙”的板子,在当时支撑起了令人咋舌的运算速度,它像一个沉默的证人,静静诉说着那段充满汗水味和松香味的岁月。
从在机房里懵懂地听说“银河”,到亲身参与其中,眼看着一排排冰冷的机柜在国家气象预报、石油勘探、航空航天等领域发挥出巨大作用,这个感觉非常奇妙,就像你看着自己一点一点喂养大的孩子,突然有一天能扛起千斤重担了,前些天,我路过一个老旧的计算中心,看到一台退役的银河早期型号被静静地放在大厅一角当展品,我走过去,摸了摸那已经冰凉的机柜,从气窗往里看,里面落了一层薄薄的灰,耳边仿佛又响起了当年那震耳欲聋的散热风扇声,和兄弟们为了一个技术方案争得面红耳赤的吵嚷,一晃这么多年过去,外面的世界计算速度已经进入了E级时代,但我们都知道,当年在那样一穷二白的条件下,靠着那股子不信邪的劲儿,硬生生给中国超算踏出一条路来的日子,才是这一切真正的起点。
那张巨大的机房里,日光灯嗡嗡轻响,空气里弥漫着电子元器件特有的气息,一切都还是那么熟悉。