1944 年 8 月,第一部可程式化的通用型電腦 ENIAC 正在趕工之際,在不同領域都展現過人天分的馮紐曼應邀前來參觀。沒想到他看沒多久就眉頭一皺……
本文為系列文章,上一篇請見:第一台通用型電子計算機——專利糾葛、優劣並存的 ENIAC │《電腦簡史》數位時代(十)
天才——22歲登柏林大學最年輕教授,30歲與愛因斯坦同獲高等研究院延聘
馮紐曼 1903 年出生於布達佩斯,自小就展露過人天分。他六歲能心算八位數的除法,八歲就會微積分;看過的書過目不忘,還能背下厚厚的電話簿。他 22 歲拿到數學博士學位後,隨即被柏林大學延聘,成為該校有史以來最年輕的教授,並在三年內發表了 32 篇數學論文。1933 年,未滿 30 歲的他就被延請至普林斯頓高等研究院,和愛因斯坦等人並列為創院的四位學者之一。
只要與馮紐曼打過交道的人,沒有一個不對他的絕頂聰明嘆服不已;更令人驚奇的是,即使是他之前未曾接觸的領域,他也能立即洞悉根本問題,提出非凡見解,宛如已鑽研多年的專家。或許因為具有這樣的天賦,馮紐曼在數學以外的領域也做出許多重要貢獻,包括賽局理論、量子力學、流體力學……等等。
1930 年代晚期,他因為建構出震波的數學模型,而被軍方多個單位聘為顧問,為砲彈內的火藥應如何裝填提供建議。1943 年他還加入曼哈頓計畫,負責模擬計算原子彈的內爆作用。
模擬爆炸的數學模型涵蓋許多複雜的方程式,比計算彈道還耗費時間,更需要藉助於計算機。馮紐曼很清楚機電式計算機的侷限,一直在注意是否有新的技術突破。因此 1940 年 9 月史提畢茲在達特茅斯學院展示複數計算機的功能時,他也在現場;1944 年初 IBM 打造的哈佛一號啟用後,他又立即奔赴哈佛大學試用。
ENIAC 果然快!但設定程式要半天以上是怎麼一回事?
1944 年 8 月,馮紐曼赴美國陸軍的阿伯丁試射場開完會後,在火車月台上等車時,突然有人過來向他致意,原來是負責督導摩爾電機學院製作射表的陸軍中尉高士汀。
他們兩人之前並不認識,但對原本是數學教授的高士汀而言,馮紐曼一直是他的超級偶像,因此才像個粉絲般冒昧上前攀談。高士汀提及自己正在監造的電腦 ENIAC,每秒可執行 333 次乘法時,馮紐曼眼睛一亮,不斷追問技術細節,高士汀乾脆邀他前來參觀。
幾天後馮紐曼就迫不及待的來到摩爾電機學院,ENIAC 的運算速度的確遠遠超過他所見過的任何計算機,但每要更換程式就得重新接線、切換千百個開關,至少要花半天以上的工夫,嚴重拖累整體效能。馮紐曼一針見血的指出解決之道:讓程式和數據一樣,用打孔卡片編寫,再輸入到記憶單元中儲存起來。如此便可輕易更換不同程式,又不會影響運作速度。
其實設計 ENIAC 的莫奇利與艾科特何嘗沒想過這麼做,但如果仍用真空管擴增記憶容量,除了成本會大幅增加,更嚴重的是,不時會有真空管燒壞而造成計算錯誤。
因此艾科特 1943 年底就已經在研究更可靠的記憶裝置,他發現一種用於雷達螢幕的「延遲線記憶體」(delay line memory,原理見文末),或許可以做為電腦的記憶體。這是一根裝滿特殊液體的金屬管,輸入端的石英晶體因電流而震盪,產生的脈衝波經由液體傳遞到另一端的石英晶體後,因為壓電效應再轉成電子訊號輸出。
另行設計 EDVAC,用「水銀延遲線」貯存程式
不過要做為電腦的記憶裝置,金屬管的長度要夠長,才能容納夠多的脈衝波。但相對地,脈衝波的能量耗損也與長度成正比,除了影響訊號傳遞的正確性,也無法維持長久讓電腦隨時存取。
艾科特於 1944 年初發現脈衝波在水銀中的耗損最低,同時他加了一條再生迴路 (regeneration circuit),讓輸出端的訊號又回到輸入端,如此便能穩定維持訊號,最高可達一千赫茲。也就是每條水銀延遲線可貯存 1,000 個位元。
儘管艾科特發明了水銀延遲線,但如何整合到電腦中貯存程式,又是另一個截然不同的問題。他與莫奇利久聞馮紐曼的大名,因此對高士汀順勢邀請這位傳奇人物擔任顧問也都欣然歡迎。於是馮紐曼自 1944 年 9 月開始密集參加小組會議,他們很快達成共識:將程式貯存到水銀延遲線,並且採用二進位的運算方式。
不過軍方急著要 ENIAC 上線運作,已不允許再更動設計,小組成員只好在 ENIAC 建造的同時,一邊著手設計全新的電腦:「電子離散變數自動計算機 (Electronic Discrete Variable Automatic Computer,簡稱 EDVAC)。
現代電腦架構的起源——〈 EDVAC 報告初稿〉
1945 年 6 月,馮紐曼和小組成員開完會後,搭火車橫越美國返回新墨西哥州。他在火車上振筆疾書,把大家這十個月來的討論做個總結,整理成一篇涵蓋所有技術細節的書面報告。高士汀收到這份手稿後,立即打印成 101 頁的正式文件,題為〈EDVAC 報告初稿〉(First Draft of a Report on the EDVAC)。正是在這份初稿中,馮紐曼揭櫫了引領現代電腦發展的架構:運算單元、控制單元、記憶單元,輸入裝置與輸出裝置。
其中最具革命性的就是讓所有資料都一起共用記憶單元。在此之前,程式指令用打孔卡片或接線、開關;計算的數據儲存在記憶單元;常用的函數則又貯存在另一套記憶裝置或用另一套讀卡機制輸入。
不同功能的資料用不同元件來處理,一直是天經地義的想法,如今 EDVAC 卻打破迷思,把程式、數據、函數都放在同一個記憶單元。而且程式在執行中還可以視計算結果,修改記憶體位址,讓要接連執行的程式盡量存放在鄰近的實體位置,以提升存取效率。
馮紐曼這份報告提供了打造現代電腦的基本藍圖,重要性不下於夏農那篇碩士論文,不過它卻也造成團隊的分裂。
高士汀自作主張埋下禍根,團隊成員分道揚鑣
EDVAC 是眾人努力的成果,真正屬於馮紐曼個人創見的只有可變記憶體位址,但高士汀卻在報告上將馮紐曼列為唯一作者,等於抹煞了其他團隊成員的貢獻。尤其艾科特更覺得情何以堪,他早就提出儲存程式的想法,做為記憶體的水銀延遲線還是他發明的,如今卻由讓馮紐曼一人獨享光環(至今大家仍以「馮紐曼架構」稱之)。
更嚴重的歧見是,高士汀沒有徵詢過團隊成員,就逕行將報告分發給美、英兩國 24 個單位。在高士汀與馮紐曼眼中,這就像發表科學研究一樣理所當然,更何況這會有助於高速電腦的發展。但對莫奇利與艾科特而言,他們原本要申請相關專利,如今卻因為馮紐曼的報告提前發布,而被否決。
他們兩人趕緊趁 ENIAC 尚未公開,與賓州大學爭取智慧財產權,但雙方一直無法取得共識。1946 年 3 月,莫奇利與艾科特索性辭去教職,共同創立電腦公司,逕行申請專利。
馮紐曼打造 IAS 機器,流程圖成為程式撰寫基本工具
馮紐曼也在二次大戰結束後返回普林斯頓高等研究院,沒想到他竟然意猶未盡,打算自己動手打造一台電腦。要知道,高等研究院可是像愛因斯坦這類的科學家思索宇宙真理的地方,馮紐曼竟然要在這神聖殿堂敲敲打打,搞起無關學術思想的粗活,令其他學者都感到有損體面。
不過馮紐曼天生無所忌憚,在他的堅持下,校方還是同意他打造以高等研究院為名的「IAS 機器」。透過高士汀的協助,馮紐曼於 1946 年春季取得軍方資助經費,開始招兵買馬,展開計畫(他原本還天真的想挖角艾科特,當然是被拒絕了)。
馮紐曼繼續秉承傳播科學的理念,在建造 IAS 機器的過程中,不斷釋出相關技術論文,並且特別註明放棄專利,供大家免費運用。其中一篇 1947 年所發表的文件,介紹他們如何使用源於工業工程的流程圖,來設計 IAS 機器的程式。這種視覺化的呈現方式無論用於闡明整體架構或細部指令,都更加清楚易懂,從此流程圖便成為大家撰寫程式的一個基本工具。
IAS機器於 1952 年 1 月正式運作,比原本可以成為第一部馮紐曼架構之通用型電腦的 EDVAC 還早一個月。是的,由於核心成員紛紛離去,摩爾電機學院直到 1952 年 2 月才讓 EDVAC 順利上線。EDVAC 不只落後 IAS 機器,還有很多受惠於〈EDVAC 報告初稿〉,卻比它更早開始運轉的電腦。其中幾部都不是美國製造的,包括英國曼徹斯特大學的「曼徹斯特寶貝」(Manchester Baby) 和「曼徹斯特一號」(Manchester Mark 1)、劍橋大學的「電子延遲存儲自動計算器」(Electronic Delay Storage Automatic Calculator)。
英國能這麼快趕上美國,當然不會是從零開始。事實上,英國在二次大戰時也祕密打造計算機,用以破解德軍密碼。其中一位關鍵人物——圖靈,甚至在更早之前,就發表一篇極其重要的論文,如先知般指出電腦的能耐與侷限。
小教室:雷達的延遲線記憶體
雷達原理是不斷發射無線電波,然後將反彈回來的電波轉換成電子訊號,呈現在螢幕上,藉此看出目標物的移動方向與距離。然而高山、雲層等靜止的物體也會反射電波,如果沒有過濾掉,螢幕上豈不是佈滿光點,無法區辨?
因此電波反彈回來後,訊號會一分為二,一個送往螢幕,另一個經過延遲線記憶體再送往螢幕。如果是來自靜止物體的反射電波,每個訊號都會和前一個延遲的訊號因為干涉作用互相抵銷。只有移動物體的反射訊號因為前後不一致,不會互相抵銷,才會呈現在螢幕上。