研制背景
计算,是现代化武器的灵魂。
一颗看似做着简单的自由落体运动的炮弹,其实在出发前就被设定好了精确的飞行轨道。弹道的计算十分复杂,发射速度和角度的确定不仅要考虑炮弹本身的类型和炸药特性,还要考虑风向、风速、气压、气温、湿度和当地重力加速度等环境因素,作战时在瞬间完成这些因子的综合分析显然不是人力所能及的。因此,科学家会在使用前为炮手准备好一份弹道表,炮手对照表中参数操作火炮,炮弹便基本能落到指定的目标点。
于是二战期间,军方遇到了和当年人口调查一样的难题,每种型号的炮弹都需要计算2000~4000条弹道,每条弹道都涉及复杂的微积分运算,转换成四则运算平均涉及750次乘法和更多次加减,普通计算员使用机械计算器平均需要20个小时才能算完。多型新型火炮的投入使用给美国陆军的弹道研究实验室带来了很大的制表压力,他们雇佣了100多名女计算员,以满足阿伯丁试验场每天6张弹道表的需求。苦劳是做足了,一旦出错却没了功劳。实验室很快意识到,磨刀不误砍柴工,他们急需一台强大的计算机器。
这个创造历史的项目,交给了与弹道研究实验室相距仅120公里的位于费城的宾夕法尼亚大学莫尔电气工程学院。其实论起资历与声望,600公里开外的麻省理工学院会是更好的选择,但莫尔学院“近水楼台先得月”,早与弹道研究实验室建立了友好的合作关系,那些计算弹道的计算员就是由莫尔学院负责培训的。
1937年,费城一位名为普雷斯伯·埃克特(J. Presper Eckert)的天才少年收到了梦寐以求的麻省理工学院录取通知书,但他的母亲不希望自己唯一的儿子离家太远,他的父亲则不希望他学理工,还骗他说麻省理工的学费高昂,支付不起,百般无奈之下,埃克特只好“屈就”宾夕法尼亚大学的金融学院。不多久,对金融实在提不起兴趣的埃克特寻求转专业的机会,可是他最想去的物理系已经招满了,再一次的无奈之下,他来到了莫尔学院。那时的埃克特并不会料到,正是这个他“屈就”了再“屈就”的地方,给了他名垂青史的机会。
普雷斯伯·埃克特(J. Presper Eckert),1919-1995,美国电气工程师、计算机先驱。(图片来自网络)
1943年4月9日,恰好是埃克特24岁生日的这一天,莫尔学院和弹道研究实验室所属的陆军军械部签订了6.17万美元的研制合同,年轻的埃克特虽然还是一名在读研究生,但由于杰出的专业能力被任命为项目总工程师。
这台计算机就是大名鼎鼎的电子数字积分器与计算机(Electronic Numerical Integrator and Computer),简称ENIAC。由于是为了处理弹道计算中的微积分而设计的,起初,它的名字是电子数字积分器(Electronic Numerical Integrator),但由于它的通用性,后来被用于各种其他计算,才有了追加的“and Computer”。
和埃克特搭档的,是年龄大他一轮的约翰·莫奇利(John Mauchly),时年36岁的莫奇利已是乌尔辛纳斯学院(同在宾夕法尼亚州)的物理系主任,拥有约翰·霍普金斯大学物理学博士学位。他被委任为ENIAC项目顾问,由于教学工作不能投入全部精力,但只要一有时间就会钻进项目里,最终出色地完成了ENIAC的总体设计,与主要负责工程实现的埃克特并称“ENIAC之父”。他们共同领导莫尔学院50人的兼职团队,一个主理论、一个主工程的黄金搭档模式像极了实现ABC的阿塔纳索夫和贝里。
约翰·莫奇利(John Mauchly),1907-1980,美国物理学家。(图片来自网络)
ENIAC于1945年底竣工,在1946年2月14日晚正式亮相,并于日次交付。它的最终造价是48.7万美元,相当于今天的700多万美元。
组成结构与工作原理
ENIAC比巨人机更加庞大,总长约30米,高约4米,厚约0.9米,占地约167平米,需要布置在一个很大的房间。这台重达27吨的电子巨兽体内大约包含着18000个电子管、70000个电阻、10000个电容和1500个继电器,以及500万个焊接点,每小时吞掉150kW电量。功耗之大,一度传出夸张的谣言:ENIAC一启动,整个费城的灯光都要暗下一截。
(图片来自维基百科)
来自四台早期计算机的零件,1962 年。从左到右:ENIAC 板、EDVAC 板、ORDVAC 板和 BRLESC-I 板,显示出小型化趋势。
ENIAC主要由40块模块化的功能面板组成,贴着机房的3面墙壁呈U型排布,面板之间通过下侧的接插线板相连。它们的相对位置不是固定的,可根据使用需要或习惯进行调换。此外,有3台可移动函数表通过接插线板与这些面板相连,读卡器和穿孔机直接连接至输入和输出模块的面板。
根据功能分为8个基本单元:累加器、触发器、主存储器、乘法器、除法/开方器、门电路、缓冲器以及功能表。累加器是ENIAC的基本计算单元,每个累加器由20个寄存器组成,每个10位十进制,能实现加法、减法和暂存的功能。这种累加器与现代电子计算机的CPU(Central Processing Unit,中央处理器)类似。
初始化模块顾名思义,负责完成整台机器在开始使用前的所有准备工作,比如机器上下电和累加器清零,等等。
时钟周期模块是同步机器所有模块的关键,以每10μs一个电脉冲的频率指挥着各元器件的等周期工作,就像军训时喊着“121”口令的教官,有了统一的节奏,整个队伍的步伐才不至于乱套。
主编程模块占据2块面板,其上分布着密密麻麻的旋钮,使用者可以在此编程,设置各个电信号的走向和先后顺序。如果把匆忙的电信号比作车辆,主编程模块就好比十字路口的交警,引导着车流,车驶到不同模块就完成不同的使命。同时,将这些车流按段划分,以车流段为单位指挥交通,安排它们的执行次序,就实现了所谓的结构化编程,即程序不再只能从头到尾顺序执行,它可以有条件分支和循环分支等复杂结构。
(图片来自维基百科,图中两位女程序员分别是贝蒂·吉恩·詹宁斯(左)和弗朗西丝·比拉斯(右)。)
两位程序员之间的4块面板即初始化模块、时钟周期模块和主编程模块。
函数表有3个,每个占据2块面板,通过其上的旋钮可以预置一些供其他模块反复使用的常数,这样的常数可不少,因此又添置了3台可移动的函数表(上图右侧即一台可移动函数表),每台有1456个旋钮。可移动函数表除了用于扩充3个固定的函数表,还可以直接与其他模块相连,供其查表。一次查表耗时5个加法时间。
累加器有20个,每个累加器可存放1个10位长度的十进制数(包括负数),供其他模块使用,两个累加器连接可组成一个支持20位十进制数的大累加器。累加器的线路设计为,每当从其他模块接收到数据,即将其累加到当前的存储值之上,故名累加器。累加器之间可互相传递自己的存储值,以此实现加法,也可传递存储值的补码,以此实现减法,因此ENIAC没有加减法的功能面板。一次数据传输或加减运算耗时200μs,这个时间被称为“加法时间”,是我们讨论ENIAC运算速度的基准时间。
比起诸多早已使用二进制或混合编码的前辈,仍然使用十进制的ENIAC就显得有些原始了。埃克特和莫奇利从机械计算器中的十齿齿轮获得灵感,用10个电子管电路存储1个数位,分别表示0~9,同一时间只有1个电路导通,以表示该数位上的值。这意味着,每个累加器需要100个这样的电路,并且,事实上每个电路平均要用到3.6个电子管。虽然比较浪费,但至少降低了设计难度。
高速乘法器占据3块面板,一次n位数(n≤10)乘法的耗时是n+4个加法时间。之所以强调“高速”,是因为它不是靠重复加法实现乘法的,而是直接查找预置在函数表里的部分积,然后将它们加起来。
除法和开平方运算支持20位数,它们都是靠重复减法实现的,因此它们共用一块功能面板。一次除法或开平方运算的耗时取决于计算结果,结果为n位时,耗时平均为13n个加法时间。
数据的输入输出设备是现成的IBM读卡器和穿孔机,分别受控于输入模块和输出模块。每张穿孔卡片可存8个10位十进制数,读取一张卡片需要0.48秒,穿孔一张卡片需要0.6秒。输入、输出模块分别占据3块面板,均使用继电器临时存储数据,它们是连接机器外部和内部的数据缓存池,比起内部的运算速度,读卡和制卡动作是如此之慢,所以没有必要使用电子管,毕竟继电器要便宜得多。
后话
就这样,ENIAC带着空前的计算能力来到了世上,拿下一条弹道仅需30秒,速度是人的2400倍。ENIAC团队毫不夸张地类比道:我们得出弹道所需的时间,比导弹实际飞行的时间还要短。不过此时,二战已经结束,ENIAC并没有达成最初被寄予的厚望。好在莫奇利的设计是图灵完备的,人们很快为ENIAC找到了其他用武之地,比如气流分析和天气预测等,最重要的还是在氢弹研制中的应用。研制出广岛和长崎原子弹的洛斯·阿拉莫斯国家实验室将ENIAC用于氢弹相关的计算,消耗了100万张穿孔卡片。
起初,ENIAC的可靠性非常糟糕,每天都会烧坏几个电子管,机器几乎只有一半时间能正常工作,剩下的一半时间都在寻找和替换这些罢工的电子管。不多久,工程师们发现电子管子在工作期间的可靠性其实很高,只是在加热和冷却阶段容易失效,而弹道研究实验室为了节省能源和值班人力,每天夜里都会关机,却不料拣了芝麻丢了西瓜。保持常开后,ENIAC的可靠性大幅提升,平均每两天才有1个电子管失效,并且只要15分钟就能找到它。ENIAC持续运行时间最长的一次是在1954年,它一口气跑了116个小时,接近5天。
ENIAC使用了大量电缆,为了防止老鼠啃咬上面的绝缘层,工程师们想到了一个很有意思的办法:将裹着各种绝缘材料的电缆一起扔到老鼠面前,观察哪种材料是老鼠不爱吃的,就选用这种材料的电缆。
ENIAC的存储能力近乎为零,20个累加器只够存放几类基础运算所需的参数和结果,对于复杂问题,使用者还往往不得不将中间结果输出到穿孔卡片,回头再读进来。因此,ENIAC的程序和巨人机一样是存在于旋钮和接插线板上的,尽管在研制过程中,存储程序的概念已经萌生,但机器的存储容量并不允许他们将程序塞进累加器里,而进度上的压力又允许为此再做改动。结果是,ENIAC团队在兼具技术和想法的情况下,不得已把“第一台存储程序计算机”的名头乃至存储程序思想提出者的身份拱手让人。
ENIAC有着比巨人机更多的旋钮和接插线孔位,在它上面编程十分复杂。ENAIC最早的6位程序员是从莫尔学院培养的女计算员中选拔出来的,她们不仅聪慧过人,而且细致耐心。经过一段时间的学习,她们对ENIAC的工作机制了如指掌,将数学家们的想法精准地转换为旋钮和接插线的位置组合。她们的认真与细致最大程度上减少了BUG的出现,是ENIAC正常运行的重要保障。1946年2月14日,ENIAC第一次公开演示的程序就出自她们之手。ENIAC之后,她们还参与到其他具有历史意义的计算机项目中(比如最早的商业电子计算机UNIVAC和BINAC),继续发挥不可替代的作用。
然而,可怕的偏见剥夺了她们应得的认可和尊重,ENIAC的交付仪式和庆功宴甚至没有邀请她们中的任何一位。在当时的人们眼中,她们和使用机械计算器的计算员并没有什么不同,甚至曾被认为是站在ENIAC旁边的模特,如果要说贡献,那就是为男性省下了更多时间和经历,以从事更有技术含量的工作罢了。(在那个年代,包括计算机研制在内的高科技工作都是由男性承担的,如果不是战争造成的劳动力短缺,女性其实根本没有参与的机会。)
1997年,6位程序员入选国际科技女性名人堂,历史最终为她们正名,可惜的是其中有1位没能在有生之年等到这一天。让我们记住她们的名字:凯瑟琳·安东内利(Kathleen Antonelli)、贝蒂·吉恩·詹宁斯(Betty Jean Jennings)、弗朗西斯·伊丽莎白·霍尔伯顿(Frances Elizabeth Holberton)、马琳·梅尔泽(Marlyn Meltzer)、弗朗西丝·比拉斯(Frances V. Bilas)、露丝·泰特尔鲍姆(Ruth Teitelbaum)。
30022-45cb5e9d2a9712a5.jpg
最早操作ENIAC的6位女程序员(图片来自维基百科)
1947年6月27日,埃克特取得了ENIAC的专利。阿塔纳索夫对此大为震惊,他与莫奇利在美国科学促进协会(AAAS)1940年的冬季会议上认识,并在第二年邀请过莫奇利前去参观他们正在研制的ABC,两人就计算机的设计做了一星期的深入交流,这意味着,莫奇利很可能从ABC中得到许多启示。而长久以来,人们都误认为第一台电子计算机是ENIAC,而对ABC一无所知。1967年,美国两家公司为此打了一场官司,经过长时间的取证和前后135天的听证会,法院最终在1973年10月19日宣布ENIAC的专利——这份长达207页、凝聚了无数智慧和心血的专利——无效。这称得上是一次著名的“冤假错案”了,毕竟此前阿塔纳索夫并没有为ABC申请专利,而打官司的也不是ABC和ENIAC的设计者本人,最重要的是,ENIAC实现了许多ABC所没有的功能,并且切实地投入了实际应用(而ABC更接近于一台未能完整实现的原型机)。时过境迁,历史终会给出更公正的判决:ABC名至实归是第一台电子计算机,而ENIAC是第一台通用电子计算机,两者并无冲突。
1955年10月2日23:55分,运行了近10年的ENIAC正式退役,如今,其部件散藏于宾夕法尼亚大学、美国陆军军械博物馆、美国计算机历史博物馆、史密森学会等多家机构。1996年,ENIAC诞辰50周年之际,宾夕法尼亚大学出资在一块长7.44毫米、宽5.29毫米的芯片上实现了ENIAC的全部功能,完成一次寓意深长的隔空致敬。
芯片上的ENIAC(图片来自维基百科)
参考文献
Wikipedia. ENIAC[EB/OL].
IDG. Q&A: A lost interview with ENIAC co-inventor J. Presper Eckert[EB/OL].
胡守仁. 计算机技术发展史(一)[M]. 长沙: 国防科技大学出版社, 2004.
崔林, 吴鹤龄. IEEE计算机先驱奖(1980-2014)(第三版):计算机科学与技术中的发明史[M]. 北京: 高等教育出版社, 2014.
Eckert J P. Electronic Numerical Integrator and Computer: US3120606[P]. 1947-06-26.