電子數值積分計算機(英語:),由其縮寫,簡稱為伊尼亞克(英語:,發音: /ˈɛni.æk/,也可称埃尼阿克)是世界上第一台通用计算机。它是图灵完全的电子计算机,能够重新编程,解决各种计算问题。
格伦·贝克(远)和贝蒂·斯奈德(近)在位于弹道研究实验室(BRL)Building 328的ENIAC上编程。(美国陆军照片)
程序员贝蒂·让·詹宁斯(左)和弗兰·比拉斯(右)操作位于穆尔电气工程学院的ENIAC主控制面板。(美国陆军照片,来自ARL技术图书馆档案)
ENIAC为美国陆军的弹道研究实验室(BRL)所使用,用于计算火炮的火力表。ENIAC在1946年公布的时候,就被当时的新闻赞誉为“巨脑”。它的计算速度比机电机器提高了一千倍。这是一个飞跃,之前没有任何一台单独的机器达到过这个速度。它的数学能力和通用的可编程能力,令当时的科学家和实业家非常激动。发明它的人为了进一步推广这些新思想,举办了一系列关于计算机体系结构的讲座。
在二战期间,美国陆军资助了ENIAC的设计和建造。建造合同在1943年6月5日签订,实际的建造在7月以“PX项目”为代号秘密开始,由宾夕法尼亚大学穆尔电气工程学院进行。建造完成的机器在1946年2月14日公布,并于次日在宾夕法尼亚大学正式投入使用。建造这台机器花费了将近五十万美元(考虑通货膨胀,相当于2011年的六百五十萬美元)。1946年7月,它被美国陆军军械兵团正式接受。为了翻新和升级存储器,ENIAC在1946年11月9日关闭,并在1947年转移到了马里兰州的阿伯丁试验场。1947年7月,它在那里重新启动,继续工作到1955年10月2日晚上11点45分。
ENIAC是宾夕法尼亚大学的约翰·莫奇利(John Mauchly)和約翰·皮斯普·埃克特(J. Presper Eckert)构思和设计。协助开发的设计工程师团队包括罗伯特·F·肖(函数表)、朱传榘(除法器/平方-平方根器)、托马斯·凯特·夏普勒斯(主程序器)、阿瑟·伯克斯(乘法器)、哈利·赫斯基(读取器/打印器),还有杰克·戴维斯(累加器)。ENIAC在1987年被评为IEEE里程碑之一。
描述
容器裡的ENIAC電容器
ENIAC是模块化计算机,由执行不同功能的独立面板组成。其中二十个模块是累加器,这些累加器不仅能做加减运算,还能存储十位十进制数。当数被调用的时候,它们通过一些通用的总线在这些单元间传递。为了实现高速,面板需要独立完成发送和接受数、计算、储存结果、触发下一个操作,这一系列的操作都不需要任何移动部件。它的多功能性关键在于“分支”的能力——能根据计算结果的符号触发不同的操作。
除了速度之外,ENIAC最引人注目的就是它的体积和复杂性。ENIAC包含了17468个真空管、7200个晶体二极管、1500个继电器、10000个电容器,还有大约五百万个手工焊接头。它的重量达27吨(30美吨),体积大约是2.4m×6m×30.48m(8×30×100英尺),占地167平方米(1800平方英尺),重30英吨,耗电150千瓦(导致有传言说,每当这台计算机启动的时候,费城的灯都变暗了)。IBM的卡片阅读器用于输入,打卡器用于输出。使用IBM会计机(比如IBM 405)可将这些卡片用于离线产生输出。
ENIAC使用十位环形计数器存储数字,每个数字使用36个真空管,其中10个是双三极管,它们组成了环形计数器的触发器。算数运算通过对环形计数器脉冲的计数进行,如果计数器被脉冲“环绕”了,则产生一个进位脉冲。“环绕”的思想在电子领域模拟了机械加法机数字滚轮的操作。ENIAC有20个带符号的十位累加器,它们使用10的补码表示方法,每秒可在它们和数字源(例如另一个累加器,或者常数传送器)进行5000次简单加减操作。因为几个累加器可以同时运行,所以潜在的速度峰值由于这种并发操作而比上述数字高得多。
通过将两个累加器用线连接起来,可以实现双精度计算,不过累加器进行电路时序控制,這阻止了三个或更多的累加器被连接起来讓精度更高的擴充可能。ENIAC中的四个累加器被一个特殊的“乘法器”单元所控制,每秒可进行385次乘法操作。还有五个累加器被一个特殊的“除法器/平方-平方根器”单元,每秒可进行四十次除法运算或三次求平方根运算。
ENIAC中其他九个单元是“初始化单元”(启动和停止机器)、“循环单元”(用于同步其他单元)、“主程序器”(控制“循环”序列)、“读取器”(控制IBM打孔卡片读取器)、“打印器”(控制IBM打孔卡片的打孔)、“常数传送器”,还有三个“函数表”。
Cpl. Irwin Goldstein正在设置ENIAC一个函数表上的开关。(美国陆军照片)
罗哈斯和Hashagen(或者威尔克斯)对于各种操作的时间给出了更多细节,这些时间与上述不同。基本机器周期是200微秒(循环单元中100kHz时钟的20个周期),进行十位数运算时每秒种5000个周期。在一个周期内,ENIAC可以向寄存器内写入一个数,从寄存器内读取一个数,或者加/减两个数。10位数乘以d位数(“d”最大是10)的运算占用d+4个周期,所以10位数乘以10位数的运算占用14个周期,也就是2800微秒(每秒357次)。如果其中一个数不足10位,则操作进行得更快。除法和求平方根的操作占用13×(d+1)个周期,“d”是运算结果(商或平方根)的位数。所以,除法和求平方根操作最多占用143个周期,也就是28600微秒(每秒35次)。(威尔克斯说,产生10位数商的除法操作仅需要6毫秒。)如果结果的位数不足10,则速度更快。
可靠性
ENIAC使用普通的八脚电子管,十进制累加器用6SN7触发器制成,6L7、6SJ7、6SA7,和6AC7用于逻辑功能。无数的6L6和6V6用作线路驱动器,驱动着脉冲从机架组件间通过电缆传递。
ENIAC一个部分的背面细节,展示出了电子管。
当时,一些电子方面的专家预言管件会经常坏,导致机器根本没法使用。这个预言后来被部分证实了:每天都有几个管件烧坏,使ENIAC有差不多一半的时间功能受损。1948年以前并没有特殊的高可靠性管件。然而,这些损坏多数时候发生在预热和冷却时期,在这两个时期,管件加热器和阴极承受着最大的压力。于是,工程师采用了一种简单但是代价昂贵的手段,就是永远不把机器关掉,由此把ENIAC的管件损坏频率降低到了可接受的程度——每两天损坏一个管件。根据1989年对Eckert的采访,不断损坏管件的故事因此几乎成了一个神话:“我们每两天就有一个管件坏掉,但是我们能在15分钟内定位到问题出现的地方。”1954年,没有损坏持续运作最长的时间是116小时(接近五天)。
编程
虽然弹道研究实验室是ENIAC的发起者,但是直到这个三年的项目进行了一年以后,约翰·冯·诺伊曼才注意到这台计算机,当时他在洛斯阿拉莫斯国家实验室研究氢弹。这个实验室随后深入参与了ENIAC项目,以至于对ENIAC的第一次测试运行是计算氢弹相关数据,而不是火力表。这次测试的输入、输出数据是一百万张卡片。
ENIAC可以编程,执行复杂的操作序列,可以包含循环、分支和子程序。获取一个问题并把问题映射到机器上是一个复杂的任务,通常要用几个星期的时间。当问题在纸上搞清楚之后,通过操作各种开关和电缆把问题“弄进”ENIAC还要用去几天的时间。然后,还要有一个验证和测试阶段,由机器的“单步执行”能力协助测试。
当时在ENIAC编程方面做得最多的六位女士,1997年入选国际科技名人堂。根据她们在1946年互相的称呼,她们是凯·麦克纳尔蒂(凯瑟琳·安东内利)、贝蒂·詹宁斯(让·Bartik)、贝蒂·斯奈德(贝蒂·Holberton)、Marlyn·Wescoff(Marlyn·梅尔策)、弗兰·Bilas(弗朗西丝·斯宾塞),和露丝·Lichterman(露丝·泰特鲍姆)。珍妮弗·S.·莱特的文章《当计算机是女人》记录和阐述了操作ENIAC的女士们的角色,以及历史上对女性在计算机科学历史中角色的遗漏或淡化。ENIAC程序员的角色也在2010年的一个纪录片中被正视。
ENIAC是个独一无二的设计,从来没被复製过。1943年设计的冻结意味着,计算机设计缺乏创新,发展得不好,尤其是缺乏存储程序的能力。Echert和Mauchly开始了一个新的设计工作,后来被称为EDVAC,这个设计不但更简单,而且更强大了。特别是在1944年,Eckert写了他对于存储单元的描述(汞的延迟线存储器)。这种存储单元既存储数据,又存储程序。冯·诺伊曼向穆尔学校征询EDVAC,并旁听了穆尔学校的会议。存储程序的概念在这个会议上提出来了,他写下了不完整的笔记(《关于EDVAC的报告初稿》),拟用作内部的备忘录,描述、说明会议上提出的关于正规逻辑预言的思想。ENIAC的管理员和安全人员赫尔曼·戈德斯坦向一些政府和教育机构分发了《初稿》的副本,广泛地带动了对构建新一代电子计算机(包括EDSAC和SEAC)的兴趣。
从1948年期,ENIAC进行了若干次升级,其中就包括原始的只读程序存储机制。这个机制以函数表作为程序的只读存储器,由理查德·Clippinger博士提出,并包含在了ENIAC的专利中。Clippinger向冯·诺伊曼询问实现什么样的指令集。Clippinger想出了一种三地址结构,而冯·诺伊曼提出了一地址结构,因为实现起来更简单。一个累加器(6)的三个数字用作程序计数器,另一个累加器(15)用作主累加器,第三个累加器(8)用作从函数表中读取数据的地址指针,另外的大部分累加器(1-5、7、9-14、17-19)用作数据存储。ENIAC中存储的程序的编程工作是由贝蒂·詹宁斯、Clippinger和阿黛勒·戈德斯坦完成的。1948年9月16日,ENIAC运行了一个由阿黛勒·戈德斯坦写给冯·诺伊曼的程序,因此成为了第一个存储程序计算机。这个修改在六个因素上降低了ENIAC的速度,并且限制了并行计算能力,但是因为把重新编程的时间从几天减少到了几个小时,所以性能上有些损失也是值得的。分析也显示,因为电子计算速度和机电输入/输出速度的巨大差异,即使不利用原始机器的并行功能,几乎所有现实世界的问题也完全是输入/输出绑定(I/O bound)的,即使因为上述修改,速度降低了