フォン・ノイマン型アーキテクチャ:EDVAC 報告書
1945 年にペンシルベニア大学で完成した ENIAC は、当時世界最速の電子計算機だった。一万八千本近い真空管を使い、一秒間に五千回の足し算をした。だが計算を変えるには、パネルの上のケーブルとスイッチを配線し直さなければならず、それはプログラマーのチームが何日もかける仕事だった。
ENIAC の技術者 J・プレスパー・エッカートとジョン・モークリーは、すでに次の機械 EDVAC を計画していた。そこではプログラムが記憶装置に保持される。フォン・ノイマンは彼らの会議に出席するようになり、1945 年 6 月、「器官」や「ニューロン」について語る抽象的な、ほとんど生物学的な言葉で、グループの考えを整理した文書を書いた。
計算機の部分
『EDVAC に関する報告書の第一草稿』は、次のものからなる計算機を記述している。
- 計算を行う演算装置
- 命令を一つずつ読み、実行させる制御装置
- 数と命令を同時に保持する記憶装置。どちらも二進数字の列として書かれる
- 入力と出力の装置
決定的な新しさは 3 番目にある。プログラムがデータと同じ記憶装置に保持されるので、計算を変えるとは記憶装置の中の数を変えることであり、配線を変えることではない。しかもプログラムは自分自身の命令を計算し、書き換えることさえできる。これは 1936 年のチューリングの万能機械のアイデアを、真空管と水銀遅延線で実現したものである。
四行のプログラム
0 から 7 まで番号のついた八つの位置をもつ記憶装置と、アキュムレータと呼ばれるレジスタを考えよう。
| 位置 | 内容 | 意味 |
|---|---|---|
| 0 | LOAD 5 |
位置 5 の数をアキュムレータに入れる |
| 1 | ADD 6 |
位置 6 の数をアキュムレータに足す |
| 2 | STORE 7 |
アキュムレータを位置 7 に格納する |
| 3 | HALT |
終了 |
| 5 | 40 |
データ |
| 6 | 2 |
データ |
| 7 | 0 |
結果 |
制御装置は位置 0 から始め、実行しては次へ進む。三歩の後、位置 7 には $42$ が入っている。命令とデータは隣り合って住んでいる。STORE 1 という命令が二番目の命令を上書きするのを妨げるものは何もない。そして、それこそが、あるプログラムが別のプログラムを生成できる理由なのだ。
発明したのは誰か
報告書は本来、参加者の間だけで回覧されるはずだったが、ハーマン・ゴールドスタインがそれを広く配布し、表紙にはフォン・ノイマンの名前だけがあった。フォン・ノイマンが来る前からプログラム内蔵方式について議論していたエッカートとモークリーは、成果を奪われたと感じた。さらに、この文書は公表済みとみなされたため、彼らはこのアイデアで特許をとる機会を失った。争いはグループをむしばみ、グループは 1946 年に解散した。今日の歴史家たちは、このアイデアが集団のものであり、フォン・ノイマンの功績はそれを明快かつ一般的に記述し、世界中に広めたことにある、という点で一致している。
練習:プログラムを追う
位置 5 と 6 の内容を $17$ と $25$ に、位置 1 の命令を SUBTRACT 6 に替える。最後に位置 7 には何が入るか。
アキュムレータはまず $17$ を受け取り、次に $17 - 25 = -8$ となり、これが位置 7 に格納される。同じ回路が、記憶装置の数が変わっただけで、配線に一本も触れずに別の計算をしたのである。
練習:自分を書き換えるプログラム
HALT の前に、次に実行したときには位置 7 を自分自身にも足すようにする命令を加えよ。なぜこれはプログラム内蔵方式でなければできないのか。
たとえば、アキュムレータに ADD 7 の符号が入っているときに STORE 1 を実行すれば、二番目の命令が書き換えられる。次にプログラムを実行すると、位置 1 には ADD 7 と書かれている。これができるのは、命令がデータと同じ記憶装置に保持された数だからにほかならない。ENIAC ではプログラムは配線の中にあり、プログラム自身がそれを書くことはできなかった。
出典: John von Neumann, First Draft of a Report on the EDVAC(1945)· Herman Goldstine, The Computer from Pascal to von Neumann(1972)· George Dyson, Turing’s Cathedral(2012)· John Backus, “Can programming be liberated from the von Neumann style?”, Communications of the ACM(1978)。