1966年11月26日,吕辰穿上了嫂子陈雪茹专门定制的新衣服。
深灰色的中山装,领口内侧绣了一个小小的“辰”字,针脚细密,是陈雪茹熬了两个晚上亲手缝上去的。
今天是个大日子。
早在一周前,计算机所就传来消息,昆仑-0机搭建完成,进入开机联调前的最后阶段。
消息是通过保密电话传到红星所的,宋颜教授接完电话,在办公室坐了很久,出来的时候眼眶是红的。
随后,红星所以星河计划指挥部之名,向全国星河计划各组、各成员单位发函,将于11月26日举行第四次星河计划全体会议,共同见证昆仑-0机的开机仪式,共商昆仑工程下一步工作,制定星河计划下一批攻坚任务。
函件发出后,回电像雪片一样飞回来。
二十七组,全部确认参会。
“走吧。”门外传来诸葛彪的声音,“再不走赶不上车了。”
吕辰转过身,拿起桌上的笔记本,推门出去。
走廊里已经站满了人。
谢凯、钱兰、吴国华、宋颜教授,还有集成电路实验室的几个组长,一个个都穿着干净的中装,扣子扣得整整齐齐,像是要去参加什么隆重的典礼。
事实上,这就是典礼。
一辆草绿色的军用卡车停在研究所门口,发动机轰轰地响着。
众人爬上后车厢,扶着车帮站好。车开动,冷风灌进来,吹得人脸生疼。但没人说话,每个人都沉默着,像是在想什么心事。
吕辰靠在车帮上,看着灰蒙蒙的天空。
从1964年春天提出“昆仑工程”的构想,到今天,整整两年零八个月。
两年零八个月里,理论组在算指令集,设计组在画逻辑图,光刻组在攻关工艺,存储组在研究磁芯和半导体存储,机械组在加工精密零件,计量组在研制光栅尺和时钟源……
今天,要见分晓了。
车子拐进中关村,远远就看见计算所门口站着一排持枪卫兵,比平时多了三倍。门口拉起了警戒线,所有车辆和人员都要接受检查。
卡车停下来,卫兵上车检查证件,一一看过,确认无误,才挥手放行。
车子开进院子,在主楼前停下。
吕辰跳下车,环顾四周。
计算所的主楼是五十年代建的,灰砖墙,拱形窗,朴素得像一座仓库。但今天,这栋朴素得不能再朴素的建筑,被层层警卫围得像一座堡垒。
主楼门口站着两个穿军装的值班军官,肩章上的星星在晨光中闪着光。旁边还有几个穿便衣的,腰里鼓鼓囊囊的,一看就知道带着家伙。
吕辰目光扫过停在院子里的那些车:军绿色的吉普,黑色的伏尔加,还有几辆“红旗”。
“走吧。”宋颜教授在前面招呼。
众人跟着他往主楼里走。
二层大会议室,能容纳两百多人的大房间里已经坐了大半。长条桌摆成回字形,桌上铺着白布,每个位置前放着一个军绿色的文件夹、一支铅笔、一个搪瓷缸子。
主席台在最前面,一排桌椅,上面立着几个名牌。
吕辰在靠后的位置坐下,目光扫过会场。
星河计划二十七个组,水牌一个不少。每一个水牌后面都坐着人,有头发花白的老教授,有戴着厚眼镜的中年工程师,也有像他一样的年轻人。
靠墙还坐着一排穿军装的,肩章上星星杠杠各不相同。吕辰认出了其中几个——国防科委的、四机部的,还有第二十四、二十五研究院的人。这些人平时很少出现在这种场合,今天全来了。
主席台上,名牌已经摆好。钱先生、王先生、孙老、刘星海教授,还有计算机所的夏先生已经就坐。
八点半的时候,两百多个座位几乎全坐满了,后面还加了一排椅子。空气里弥漫着烟味和搪瓷缸子里茶叶的香气,说话声嗡嗡的,像一锅快要烧开的水。
八点五十分,会议室的门被推开。
首长走了进来。
他穿着深灰色的中山装,头发梳得一丝不苟,目光沉静,步伐不快不慢。身后跟着国防科委的王主任、四机部的周副部长,还有几个吕辰不认识的人。
全场起立。
首长走到主席台前,微微点了点头,示意大家坐下。他在自己的位置坐下,环顾了一圈会场,目光从每一张脸上扫过。
“都到齐了?”他侧头问旁边的刘星海。
刘星海点头:“星河计划27个组,与会相关单位的负责人,全部到齐。”
首长点点头,没再说话。
九点整,刘星海站起来,目光扫过全场。
“第四次星河计划全体会议,现在开始。”
“今天上午的议程只有一个,共同见证昆仑-0机的首次开机联调。”
他顿了顿,目光看向会场侧面的一个门。
“在开会之前,请大家先去参观昆仑-0机的现场。技术问题,由计算机所陈高工现场讲解。”
众人站起来,跟着刘星海往那个门走。
昆仑-0机被安装在计算所一个巨大的车间里。
这个车间原本是计算机所的总装车间,拱形屋顶,钢架结构,面积大约有两三百平方米。此时车间里空空荡荡,只在正中央摆着一个墨绿色的机柜。
那个机柜,在空旷的车间里,显得很不起眼。
大约一个后世双开门冰箱大小,一人多高,一米来宽,深度不到一米。用钢板焊接而成,表面喷着墨绿色的漆,棱角处包着铁皮,前开门,后部有散热孔,侧面还有两个吊装环。
机柜正面,密密麻麻排列着指示灯和开关。指示灯有红有绿,开关有大有小,最显眼的是右下角一个巨大的红色扳手开关。
机柜前面,放着一张操作台。操作台上嵌着一排荧光管阵列,大约能显示两行字符。旁边是一个二维卡读卡机,再旁边是一台针式打印机,还有一个示波器。
由于集成电路实验室的显示控制芯片刚刚完成第二次流片,最后的设计还没有定型,因此昆仑-0机还没有显示器。
两百多人围在机柜四周,里三层外三层。前面的人凑近了看,后面的人踮着脚、伸着脖子往里面瞧。
计算机所的陈高工站在机柜旁边,手里拿着一根细长的金属棒,指着机柜内部的各个部分。
“各位,这就是昆仑-0机。”
他的声音有点沙哑,但每个字都咬得很清楚。
他打开机柜的前门,露出里面的内容。
机柜内部是模块化插槽结构,如果后世的人来看,会觉得这有点像“机架式服务器”的雏形,但要粗糙得多。背板是一块巨大的陶瓷基板,上面用“掐丝珐琅”工艺手工布着密密麻麻的铜线,走线像一幅抽象画。背板上焊接着几十个插座,每个插座对应一块板卡。
“机柜内部采用模块化插槽结构。所有板卡都是标准尺寸,可以像抽屉一样插拔。”
陈高工从机柜里抽出一块板卡,举起来让大家看。
板卡大约A3纸大小,陶瓷基底,表面是密密麻麻的金属走线,上面焊着几十块陶瓷封装的芯片。芯片大小不一,排列得整整齐齐,像一座微缩的城市。板卡边缘有金属导轨,镀着一层亮闪闪的镍。
“这是控制板,代号KL-01。采用双核心冗余架构,一个主计算核,一个辅容错核。主核负责取指令、译码、发射,辅核负责指令预取和结果校验。两个核跑同样的指令流,辅核的结果和主核比对,不一致就触发中断,重新执行。”
他把板卡插回去,又抽出旁边一块。
“这是运算板,代号KL-pE。昆仑-0一共配了3块运算板,每块集成50块芯片,支持单指令多数据的向量操作。一块运算板一次能算一组数据,三块并行,理论峰值性能是单核的三倍。”
他又抽出更下面的一块板卡。
“这是存储板,用咱们自己研发的静态存储芯片,2kbit容量,四块板拼起来,一共8kbit。用于暂存中间数据。”
“这是电源板,两块,提供±5V、±12V四路电源。带过流保护、过压保护。”
“这是接口板,连接旁边的编程机、制卡机、针式打印机和示波器。”
他把板卡插回去,关上机柜门,走到侧面,指着机柜背部的散热孔。
“散热方面,采用风冷加局部液冷混合方案。机柜顶部装有一台大功率轴流风扇,向下方吹风。每块运算板的热点区域贴有铜制散热片,控制板上方有微通道液冷板,一根细铜管穿过芯片区域,里面流淌着冷却液,连接到机柜侧面的小型水箱和散热器。”
他顿了顿,又补充了一句:“这套散热系统,在满负荷运行的情况下,能把芯片温度控制在四十度以下。”
吕辰站在人群里,看着那个墨绿色的机柜。
它像一头沉睡的野兽蹲在车间中央。不是因为它有多先进,而是因为——在这个年代,在这个国家,靠着一群人的手,靠着各种土法上马,真的把它做出来了。
“技术参数,我简单报一下。”陈高工翻开手里的文件夹。
“架构:一控三算,SImd向量并行,双核心冗余。”
“主频:1mhz,基于恒温晶体振荡器,频率稳定度±5ppm。”
“字长:16位定点运算,浮点运算用软件模拟。”
“存储:8kbit暂存存储器芯片阵列,外接磁带机和磁盘机做大规模数据存储。”
“指令集:精简指令集,共四十七条指令,由理论组设计。”
“整机功耗:约八百瓦。”
“整机重量:约四百公斤。”
他合上文件夹,抬起头。
“各位,这就是昆仑-0。它不是一台完整意义上的计算机,它是昆仑一机的缩比验证机。它只有四块板子,一控三算。目标是跑通指令集,证明向量架构可行。”
首长站在最前面,听得非常认真。等陈高工说完,他开口问了一句:“和昆仑1机有什么区别?”
夏先生道:“首长,昆仑-0不是昆仑1机的缩小版。它是一个架构验证平台。”
他顿了顿,像是在组织语言。
“打个比方,我们要造一座大楼。昆仑1机是那座大楼,而昆仑-0,是那个地基的缩比模型。它的任务,不是住人,是证明这个地基能撑得住。”
他伸出三根手指:“它要证明三件事。第一,证明单指令多数据的向量并行架构能跑通。一个指令,驱动多个运算单元同时干活——这个想法,理论上可行,但没人做过。昆仑-0要做的,就是把它做出来,跑起来。”
“第二,证明双核心冗余机制能工作。主核和辅核同时跑,结果比对,不一致就报错、重跑。这个机制,在电路图上画得出来,但真到了机器上,能不能跑通?不知道。昆仑-0要回答这个问题。”
“第三,证明五微米工艺的芯片能拼成一个可用的系统。每一块芯片,良率只有百分之五六十。但把几百块芯片拼在一起,能不能稳定运行?这是系统集成的问题,也是最大的未知数。”
他放下手指,看着首长。
“换句话说,昆仑-0是为了证明,这条路,能走通。”
首长沉默了几秒,然后点了点头:“好,那就开始吧。”
夏先生引着首长、钱先生、王先生、孙老、刘星海教授来到昆仑-0机的操作面板前站定。
操作面板在机柜正面,大约两尺见方,上面密密麻麻排列着开关、旋钮和指示灯。
最显眼的是右下角那个巨大的红色扳手开关,足有巴掌长,用黄铜铸造,表面磨得锃亮。
陈高工站在操作台旁边:“各组,汇报状态。”
“电力组报告,市电输入正常,稳压器输出正常,±5V、±12V电源正常,纹波小于10毫伏。可以上电。”
“散热组报告,轴流风扇运转正常,液冷循环泵运转正常,冷却液流量正常,水箱水位正常。可以上电。”
“环境组报告,车间温度18度,湿度45%,符合运行标准。可以上电。”
陈高工看向夏先生。
夏先生看向首长:“首长,一切就绪。”
首长点了点头,走到操作面板前。
他看了看那个红色扳手开关,伸出手,握住。
全场安静了。
两百多个人,没有一个人说话。连呼吸都放轻了,像是怕惊扰了什么。车间里安静得能听见自己的心跳,还有风扇低沉的嗡鸣。
吕辰站在人群后面,屏住呼吸。
首长深吸一口气,用力拉下了那个红色扳手开关。
“咔嗒——”
清脆的一声响,像子弹上膛。
机柜正面的指示灯,一排一排地亮了起来。绿色的,黄色的,红色的——像多米诺骨牌,从第一排开始,一路往下亮,一直亮到最下面一排。
“嗡——”
轴流风扇开始转动,发出低沉的轰鸣声,像一头沉睡的野兽被唤醒。
“咕噜噜——”
液冷循环泵开始工作,冷却液在铜管里流动,发出细微的水声。
各组汇报再次开始。
“电力组报告,上电正常,各路电压稳定。”
“散热组报告,风扇运转正常,液冷循环正常,芯片温度开始上升,当前25度。”
“控制板报告,KL-01自检通过,主核正常,辅核正常,双核心冗余机制激活。”
“运算板1报告,KL-pE01自检通过,五十块芯片全部正常。”
“运算板2报告,KL-pE02自检通过,四十九块芯片正常,一块芯片温度偏高,已降频运行。”
“运算板3报告,KL-pE03自检通过,五十块芯片全部正常。”
“存储板报告,四块存储板全部正常,暂存存储器可读写。”
“接口板报告,外设连接正常。编程机在线,制卡机在线,打印机在线,示波器在线。”
陈高工一个个听着,脸上的表情一点点松弛下来。
他转向首长:“首长,自检完成,系统状态正常。可以进行加载测试。”
首长点点头,退后一步。
陈高工走到操作台前,从旁边的文件架上取出一张二维卡。卡片大约明信片大小,硬纸板材质,上面密密麻麻打满了孔。孔位排列得整整齐齐,80x80的矩阵,每个孔代表一个比特。
“这是昆仑-0的引导程序。”陈高工举起卡片,让全场的人都能看见,“它负责加载微程序、初始化寄存器、自检外设。一共六十四条指令,全部在这张卡片上。”
他把卡片放入读卡机,按下“加载”按钮。
读卡机“咔嗒”一声,把卡片吞了进去。探针矩阵开始工作,扫描电路指示灯开始闪烁。
操作台上的荧光管阵列开始显示字符。
“LoAdING……”
“mIcRocodE LoAdING……”
“INItIALIZING REGIStERS……”
“SELF tESt……”
一行一行字符,在灰白色的荧光管上跳动。
示波器上,波形开始跳动。方方正正的脉冲,整整齐齐,像士兵的脚步。
“引导程序加载完成。”陈高工看了一眼示波器,又看了一眼操作台上的指示灯。
他转过身,从文件架上又取出一张二维卡。
“这是第一个测试程序,斐波那契数列计算。用昆仑-0的向量指令集写的,计算前20项斐波那契数。”
他把卡片插入读卡机,按下“加载”按钮。读卡机再次“咔嗒”一声。
然后,陈高工走到旁边的磁带机前,按下启动键。磁带开始转动,发出“嗡嗡”的声音。
“测试数据在磁带上。”陈高工解释,“斐波那契数列的初始值,F0=0,F1=1,存在磁带里。昆仑-0从磁带读数据,用向量指令并行计算,结果存在存储板里,最后输出到荧光管阵列和打印机。”
他回到操作台前,看着荧光管阵列。
“准备就绪。”他按下了“运行”键。
机柜里的指示灯开始疯狂闪烁。绿色、黄色、红色,交替亮灭,速度快得像呼吸。风扇的轰鸣声变得更响了。示波器上的波形开始加速,从慢悠悠的跳动变成了密密麻麻的脉冲。
荧光管阵列上的字符开始滚动。
“VEctoR LoAd……oK”
“VEctoR Add……oK”
“VEctoR StoRE……oK”
“ItERAtIoN 1……F1=1……oK”
“ItERAtIoN 2……F2=1……oK”
“ItERAtIoN 3……F3=2……oK”
字符一行一行往上滚动,每出现一行,就往上顶一行,最上面的一行消失在荧光管的边缘。
吕辰盯着那些字符,心跳越来越快。
“ItERAtIoN 10……F10=55……oK”
“ItERAtIoN 15……F15=610……oK”
“ItERAtIoN 20……F20=6765……oK”
最后一行出现在荧光管阵列上——
“tESt pLEtE。ALL VEctoRS VERIFIEd。ERRoRS:0。”
全场安静了。
两百多个人,没有一个人说话。连风扇的轰鸣声都仿佛消失了,只剩下那行绿色的字符,在荧光管上安静地亮着。
车间里安静了很长时间。
也许是几秒钟,也许是几个世纪。
然后,夏先生摘下眼镜,用袖口擦了擦镜片,重新戴上。他的声音有点哑,但每个字都像刻在石头上:
“它活了。”
三个字,很轻。但在安静的车间里,每个人都听见了。
然后,掌声响起来。
不是那种热烈的、喧闹的掌声,是一种很沉的、很重的掌声,像潮水一样,从人群最前面涌起来,一路往后推,最后填满了整个车间。
吕辰看见,人群最前面,一个头发花白的老工程师蹲下来,伸手摸了摸机柜的铁皮,像摸自己的孩子。他旁边那个戴眼镜的年轻人,嘴唇抖了几下,没说出话,只是使劲拍着旁边人的肩膀。
有人摘下眼镜擦眼泪,有人站在那里看着那个墨绿色的机柜,嘴唇微微颤抖。
首长转过身,和夏先生握手:“夏先生,辛苦了。”
夏先生摇摇头,没说话,只是用力握了握首长的手。
掌声持续了很久,才慢慢落下去。
陈高工站在操作台前,等掌声停了,又开口了。
“各位,斐波那契数列只是最简单的验证。我再跑一个程序,让大家看看昆仑-0的真正实力。”
他从文件架上取出一张更大的二维卡,比刚才那张大了一圈,孔位更密。
“这是矩阵乘法程序。两个8x8的整数矩阵相乘。传统单核计算机,要算一百多个指令周期。昆仑-0用向量指令,三条指令就能算完一行。”
他把卡片插入读卡机,按下“加载”按钮。然后走到磁带机前,换了一盘磁带。
“数据在磁带上。两个8x8矩阵,数值随机生成。”
他按下磁带机的启动键,又回到操作台前,按下“运行”键。
指示灯再次疯狂闪烁。荧光管阵列上的字符开始滚动:
“VEctoR LoAd……oK”
“VEctoR mULtIpLY……oK”
“VEctoR AccUmULAtE……oK”
“Row1 pLEtE……oK”
“Row2 pLEtE……oK”
“Row8 pLEtE……oK”
“tESt pLEtE。mAtRIx mULtIpLY VERIFIEd。cYcLES:47。ERRoRS:0。”
四十七个指令周期。如果是单核计算机,至少需要一百五十个以上。三倍的性能提升,向量并行架构,真的能跑通。
陈高工又换了一个程序:快速傅里叶变换。这是“电子耳朵”项目组提出来的需求,用于信号处理。
又是四十七个指令周期。
又一行“ERRoRS:0”。
荧光管阵列上的那行字,在灰白色的荧光里安静地亮着,像一个沉默的宣判。
车间里再次安静下来。
然后,掌声又响起来了。这一次,比刚才更响,也更长。
首长转过身,看着全场的人。
他的目光从一张张脸上扫过,从那些花白的头发上扫过,从那些通红的眼眶上扫过,从那些粗糙的、布满老茧的手上扫过。
“同志们,你们做了一件了不起的事。”
他顿了顿,看着那个墨绿色的机柜。
“两年前,有人跟我说,中国人做不出自己的计算机。我说,试试看。两年后,你们告诉我,试成了。”
他转过身,看着刘星海,看着夏先生,看着钱先生,看着王先生,看着陈高工,看着那些站在人群里的、叫不出名字的年轻人。
“这不是一台机器。这是一条路。一条我们自己走出来的路。”
他宣布:“从今天起,中国人有自己的向量计算机。从今天起,在这个领域,我们不再是跟在别人后面跑,是自己在前面走。”
他走回操作台前,看着那行“ERRoRS:0”。
“这条路,能走通。”他说,“接下来,就是走下去。”
车间里又响起掌声。
这一次,有人笑了,有人哭了,有人拍着旁边人的肩膀说不出话。
那掌声里,有一种说不清的东西,像是一块石头终于落地,又像是一口气终于吐出来。