阿伯丁苦战,ENIAC最终成形
人们通常将ENIAC转化为存储程序计算的功劳归于冯·诺依曼和理查德·克利平格,然而普雷斯伯·埃克特则声称这种性能从一开始就已经被设计进去了,“克利平格后来‘重新发现’转换装置的这些用途,却并不知道它们早就存在了”。梅特罗波利斯补充说:“即使在克利平格重新配置之后,ENIAC的性能还是不足以处理蒙特卡洛代码,直到他注意到安装了一块新型矩阵面板(1输入、100输出)。他指出如果这可以用来解译上述控制模式中的指令对,那么就可能释放出足够多的可用控制单元,从而有可能实现新的模式。”
“在克拉拉·冯·诺依曼的帮助下,”梅特罗波利斯说,“我们修正并完成了计划,并着手在ENIAC中实现这些计划,而我们的问题,即第一批蒙特卡洛代码,在新模式下顺利运行。”1948年3月22日,梅特罗波利斯和克拉拉抵达阿伯丁,开始对机器进行重新配置。“当时,知道如何编程的人有约翰尼·冯·诺依曼、尼克·梅特罗波利斯和克拉拉,”哈利斯·迈耶说,“我们分成三队,这样就可以让机器全天候运行。具体安排分别是福斯特和塞尔达·埃文斯、我和罗莎莉(Rosalie)两对夫妻档,然后就是克拉拉自己和单身汉马歇尔·罗森布鲁斯。尼古拉斯·梅特罗波利斯和克拉拉教我们编程,然后我们就前往阿伯丁了。”他们在ENIAC内部工作,周围都是它的寄存器、累加器和转换装置,所以轻轻松松就学会了编程这种新技术。“在ENIAC上面的墙上有巨大的棋盘,棋盘上有十进制的交换机,”迈耶解释道,“你可以看到那些数字,约翰尼则可以辨别那些数字是数据还是指令。他深刻地认识到该如何改变拥有固定程序的机器。”
“事情有点混乱,”开始计算前的倒数第二天,克拉拉告知乌拉姆夫妇,“埃文斯一家星期四晚上就到了(福斯特正在调酒,让我向你们转达他的思念之情),迈耶一家是今晚到的,马歇尔·罗森布鲁斯(临时增加的人员)明天到,他来做最后验证。星期日早上晚点吃早餐、推迟会议等一些事务。下午6时出发,前往阿伯丁。请为我祈祷,为我祝福。”这次计算耗时6个星期。“我在电话中听梅特罗波利斯说,ENIAC真的出现了奇迹,”5月12日,乌拉姆给冯·诺依曼写信说,“它产生了25000张卡片!”
“经历阿伯丁的苦战之后,克拉拉筋疲力尽,一下瘦了7千克。她现在还在普林斯顿医院做全身检查。”冯·诺依曼说。当时她回到了家,“为了完成新的控制系统,ENIAC投入使用的前期工作花费了32天(含星期日),包括对机器和问题代码做检查,让ENIAC最终成形……随后,ENIAC运行了10天。它运作了10×16小时的一半,并且只要我们想,也许就能在此基础上继续运行……7个问题经历了16次循环(据统计,每次输入100张卡片)。这一时期结束时,所有有趣问题的答案都是固定的……显然,这个方法的成功率为100%。”
随后,由克拉拉、阿黛尔·戈德斯坦和尼古拉斯·梅特罗波利斯组成的小组开始为其他问题编码。这些问题既有为ENIAC准备的,也有为尚未建成的机器预备的。“在初期的那些日子,为问题编码是一件有趣的事,”克拉拉回忆说,“因为假如我们为尚未准备就绪的机器编码问题联合向工程师们建议,告诉他们某个新花样会非常有用,他们就会把它添加到机器的‘词汇表’中,并且在大多数情况下,能够促使其发挥作用。”
冯·诺依曼从洛斯阿拉莫斯国家实验室写信给克拉拉,讨论她开发的一个程序应该为软件编码还是直接连接到计算机。他评价道:“你的代码描述具体,令人印象深刻。”他还说:“他们现在宣称再做一个‘固定’转换装置用处不大,他们想自己做。最后我们决定让他们自己做一个,并把那条指令嵌入其中。”
克拉拉模仿人口统计模式,将中子数量的统计数据制成表格。中子会发生散射(相当于出行)、裂变(相当于繁殖)、逸散(等同于移民)或吸收(相当于死亡)。通过跟踪记录足够多代后,就可能确定给定配置是否达到临界条件。克拉拉为核弹设计做了最充足的准备,一如在人口研究办公室当学徒的态度。
冯·诺依曼的手中有一份未注明日期的手稿,其中的附注与克拉拉有关。这份手稿描述了ENIAC上《蒙特卡洛问题的实际运行》(Actual Running of the Monte Carlo Problems)。文章开头就是:“为了启动这次计算,在常量发送端(Constant Transmitter)中读入了一张IBM卡片。一张IBM卡片代表一个中子。”任何给定中子的命运都是散射、吸收、逸散、裂变或普查。卡片上的数据用来确定它的命运,包括该事件发生时球形集合中的区域、事件发生的时间、事件发生时粒子的速度、中子路径的极角、球体中心点的间距,以及所考虑的特定卡片表示的中子数量。此外,还有另外三个数字,“追查样本总体中所有中子的家谱”,指定裂变代数、“父”中子,以及当前卡片起源的原始卡片。
“启动100张卡片时读出的任何一个问题,每张卡片裂变产生的中子……在零时刻从集合的中心开始,”报告解释道,“然后,这些中子依次产生其他的中子卡片,这表明各自的事件和普查时间来临。所有逸散和吸收卡片被挑选出来,并从堆栈中移除,因为无须再跟踪它们的路径。裂变卡片代表一些中子,这些中子产生了两个或三个新的中子而且还处于普查期间。接着把裂变卡片放回到识读器中,直到每一张新打印的卡片变成完全逸散卡片、吸收卡片或普查卡片,这表明所有留存下来的中子来到了普查时间间隔的末尾。”
在普查时间间隔的末尾,T增大。一个新的循环开始了,它将前一循环的输出当作输入。这样细致地审查系列事件以前从未有过。约翰尼告诉爱德华·泰勒:“一次‘完整’的计算(比如达到10次shake evolution),估计需要6~8周。”每秒有1亿次,8周约等于500万秒。即使按照ENIAC的速度,时间也减慢了50万亿倍。
本书评论