电子数值积分计算机

<image>

<image>

电子数值积分计算机（Electronic Numerical Integrator And Computer），由其缩写，简称为伊尼亚克（ENIAC，icon，也可称埃尼阿克）是世界上第一台通用计算机，诞生于美国宾夕法尼亚大学。它是图灵完全的电子计算机，能够重新编程，解决各种计算问题。

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里程碑之一。

## 描述

<image>

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打孔卡片的打孔）、“常数传送器”，还有三个“函数表”。

<image>

罗哈斯和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用作线路驱动器，驱动着脉冲从机架组件间通过电缆传递。

<image>

当时，一些电子方面的专家预言管件会经常坏，导致机器根本没法使用。这个预言后来被部分证实了：每天都有几个管件烧坏，使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）的，即使因为上述修改，速度降低了之后仍然是这样。1952年的早些时候，ENIAC上添加了一个高速移位器，在五个因素上提高了移位速度。1952年7月，添加了一个100字的核心存储扩展，此存储体采用BCD码和Excess-3数字表示。为了支持这个扩展存储器，ENIAC配备了一个新函数表选择器、一个存储器地址选择器、脉冲整形电路，还给编程机制增加了三个新指令。

## 与其他早期计算机的比较

机械和电子计算机器从19世纪就开始出现了，但是20世纪30、40年代被看作是现代计算机时代的开端。

- 德国Z3计算机（1941年5月公布）是康拉德·楚泽设计的。这是第一台通用的数字计算机。但是它是机电计算机，而不是电子计算机，因为所有功能都使用继电器。它使用二进制数学进行逻辑地计算。它可用打孔纸带编程，但是没有逻辑分支。尽管当初设计的不是图灵完全的，但是在1998年人们发现它是图灵完全的（但是如果要利用这种图灵完全性质，需要复杂、聪明的破解）。1943年，这台计算机在柏林毁于轰炸袭击。
- 美国阿塔纳索夫-贝瑞计算机（ABC，1941年夏天公布）是第一台电子计算设备。它使用真空管实现了二进制计算，但是不是通用的，而是仅仅用于求解线性方程组。这台计算机也没有利用电子计算的速度优势。有两方面限制了它的速度：一是旋转电容鼓存储器，另一个是它的输入输出系统要把中间结果写出到纸片上。这台计算机是手动控制的，并且不可编程。
- 英国的巨人计算机（Colossus computer，1943年用于密码分析）是汤米·弗劳尔设计的。这些计算机是数字的、电子的，可用插板和开关编程，但是仅用于密码破译，并不是通用的。
- 霍华德·艾肯在1944年设计的马克一号电脑使用继电器，可用打孔纸带编程。可以计算一般的数学函数，但是没有分支结构。
- 就像Z3和马克一号一样，ENIAC可以运行任意数学运算序列，但是并不是从纸带上读取数据。像Colossus一样，它可以用插板和开关编程。ENIAC将全面、图灵完全的可编程能力与电子计算的高速性结合在一起。

ABC、ENIAC和巨人计算机都使用真空管。ENIAC的寄存器采用十进制运算，而不是像Z3或ABC那样的二进制运算。

1948年以前，ENIAC像巨人计算机一样，重新编程的时候需要重新布线。存储程序，以及存储器既用于存储程序，又用于存储数据的思想在开发ENIAC的时候就构想出来了，不过在ENIAC没有初步实现，因为二战需要这台机器尽快完成投入使用，并且ENIAC的20个存储位置也太小了，不足以同时存储数据和程序。

### 公众认知

Z3和巨人计算机都是独立于彼此，并且独立于ABC和ENIAC开发的。Z3计算机毁于1943年盟军轰炸柏林。巨人计算机是英国战争成就的一部分。它们的存在直到1970年才为公众所知，虽然它们的能力仍然只有开发它们的英国相关人员以及被邀请的美国人才知道。这些机器中，只有两台一直在英国政府通信总部（GCHQ）使用到了1960年，其余的都在1945年毁坏了。ABC计算机是在约翰·阿塔纳索夫被征召去华盛顿为美国海军做物理研究后，被艾奥瓦州立大学拆掉了。相比之下，ENIAC在1946年大展它的能力，“吸引了全世界的想象力”。或许正因如此，更古老的计算机历史与这个时期相比，在其覆盖和分析上并不是很全面。

### 专利

莫齐利曾经拥有ENIAC的专利。1973年，经过法院宣判，因莫齐利对于ENIAC的设计思想部分来源于约翰·阿塔纳索夫和克利福德·贝里设计的ABC计算机，所以专利被认定为无效，ENIAC的发明被放入公有领域。

然而，公众领域内普遍将ENIAC认定为世界上第一台电子计算机，将莫齐利认定为电子计算机之父。为此，20世纪90年代初，时年87岁的ABC计算机发明者阿塔纳索夫写信给当时的美国总统老布希，希望公众能承认他自己才是电子计算机之父。于是，老布什向他颁发了一个美国国家工艺技术金质奖章，以表彰他发明了世界上第一台电子数字计算机。

## 展览的部件

<image>

宾夕法尼亚大学工程和应用科学学院拥有ENIAC原始的四十个面板中的四个，和三个函数表中的一个。史密森尼学会在美国国家历史博物馆拥有五个面板。伦敦科学博物馆展览着一个面板。密歇根大学在Ann Arbor校园拥有阿瑟·伯克斯抢救的四个面板。位于美国马里兰州阿伯丁试验场的美国陆军军械博物馆，也就是ENIAC使用的地方，拥有一个函数表。另外还有一个面板在位于美国得克萨斯州普莱诺市的佩罗系统展览。

1997年，宾夕法尼亚大学的团队制作了一块边长8毫米（0.25英寸）的硅制方形芯片，其功能与占了一大间屋子的ENIAC相同。虽然这个20MHz的芯片比ENIAC快多了，但是仍然比20世纪90年代后期的现代微处理器慢很多。

## 外部链接

- ENIAC模拟
- 芯片上的ENIAC
- 计算机词典中的ENIAC
- 问与答：对ENIAC合作发明者J.·Presper·埃克特遗失的采访
- 对埃克特的采访 1988年2月2日，史密森学会的大卫·艾利森对埃克特关于美国国家历史博物馆的采访视频。对ENIAC深入、技术性的讨论，包括设计背后的思考过程。
- 对J.·Presper·埃克特的口头历史访谈，美国明尼苏达大学查尔斯·巴贝奇研究所。ENIAC的合作发明人埃克特谈论他在宾夕法尼亚大学穆尔电子工程学院时对ENIAC的开发；描述了ENIAC安全专利权上的困难，以及约翰·冯·诺伊曼1945年的《关于EDVAC的报告初稿》造成的困难，因为这份稿件将ENIAC投入了公共领域。这次采访是南希·斯特恩在1977年10月28日进行的。
- 对卡尔·钱伯斯的口头历史访谈，美国明尼苏达大学查尔斯·巴贝奇研究所。钱伯斯谈论了在宾夕法尼亚大学穆尔电子工程学院的时候，ENIAC项目的启动的发展。这次采访是南希·斯特恩在1977年11月30日进行的。
- 对Irven·A.·特拉维斯的口头历史访谈，美国明尼苏达大学查尔斯·巴贝奇研究所。特拉维斯描述了在宾夕法尼亚大学的时候（1941-1946年）ENIAC项目的情况，总工程师埃克特的技术和领导能力，约翰·莫齐利和埃克特的工作关系，专利权纠纷，以及它们退出大学的事情。这次采访是南希·斯特恩在1977年10月21日进行的。
- 对S.·里德·沃伦的口头历史访谈，美国明尼苏达大学查尔斯·巴贝奇研究所。沃伦担任EDVAC的项目总监；他谈论了约翰·冯·诺伊曼和约翰·莫齐利，以及他们与管理员之间关于专利权的意见分歧；谈论了约翰·冯·诺伊曼在1945年关于EDVAC的报告稿，以及缺乏对所有EDVAC贡献者的了解。
- ENIAC编程项目
- ENIAC中的女士们
- ENIAC编程
- 模函数的编程示例
- ENIAC怎样计算平方根
- 迈克·Muuss：ENIAC文档集
- ENIAC 卡尔·肯普夫的章节，《军械兵团中的电子计算机》，1961年11月。
- ENIAC的历史，马丁·H.·Weik，军械弹道研究实验室, 1961年。
- ENIAC博物馆 位于宾夕法尼亚大学
- ENIAC的规格 来自弹道研究实验室1955年第971号报告（国内电子数字计算系统的调查研究）。
- 关于ENIAC，在1964年发布（TIFF图像），还有 PDF版本 (18,305kB, 207页)
- 计算机诞生了，迈克尔·Kanellos，60周年新闻故事，《CNet》，2006年2月13日

39.9522 -75.1905