今日は The Baby が初稼働した日(1948)。
ということは、ノイマンアーキテクチャマシン上で初めてプログラムが動作した日です。
プログラム可能な機械はこれ以前にもあるし、電子計算機もこれ以前にあります。
でも、ハーバードマーク1は電子計算機ではなかったし、ENIAC のプログラムは配線を繋ぎ変えるものでした。
SSEC は電子式だったし、柔軟なプログラムができたけど、パンチカードによる外部供給式でした。
当時はまだ、高速な計算機があれば膨大な計算力が手に入る、と考えられていた時代。
プログラムは、必要上作らないとならないものではありましたが、簡単に作れると思われていました。
ところが、実際に計算機ができてみると、プログラムこそが一番重要な問題だったと気づきます。
ENIAC を作成したエッカートとモークリーは、ENIAC 建造中にこの問題に気づきました。
そこで、次に作る機械ではプログラムを作りやすくする工夫を盛り込もうと計画します。
それが、数値などの計算に必要なデータと共に、計算手順も数値としてメモリに搭載するという方法です。
ENIAC プロジェクトは国防上の機密事項でしたから、この設計も秘密裏に行われています。
ところが、プロジェクトを視察に来た天才数学者、フォン・ノイマンが、このアイディアを気に入ってしまいます。
彼は、次世代計算機 EDVAC の概要を、自分の名義で公表してしまいます。
まぁ、国防の機密をいきなり公表してしまうほど彼は馬鹿ではありませんし、裏でいろいろあったようなのですが、その話は今回は置いときます。
ともかく、世界中で「ノイマン型」アーキテクチャのコンピューターの開発競争が始まります。
そして、完成第一号は、イギリスの The Baby。
これは愛称で、正式名称は Manchester Small-Scale Experimental Machine 。SSEM と呼ばれます。
当時はまだ理論上のものだったノイマン型コンピューターが本当に動くことの確認と、そのために必要な新型メモリである「ウィリアムス管」の動作試験を兼ねた実験機でした。
実験は成功し、すぐに Manchester Mark I の設計が開始されます。
さらに、Manchester Mark I は量産され、Ferranti Mark 1 として市販されます。
さて、その The Baby ですが、新型メモリのウィリアムス管の動作確認が最大の目的でした。
当時のメモリはシーケンシャルアクセス…今のような「ランダムアクセスメモリ」(RAM)ではなく、非常に遅いものでした。
ウィリアムス管は、ブラウン管を利用したメモリで、ランダムアクセスが可能なうえ、理論通りで行けばビット密度が上げやすい、夢のようなメモリでした。
ただし、この時点ではまだ実験中のため、ビット密度が低いです。
そのため、搭載メモリは 32bit を 32word だけ。1024bit ですね。
命令は1ワード1命令。だから、たった 32命令のプログラムしか作れません。
最初に実行されたプログラムは、2の18乗の最大の真の約数を見つけ出すプログラムでした。
…ある整数 n があった時、この n を割り切れる数を「約数」と言います。
ただし、1 と n で割れることは当然です。そうではない約数を「真の約数」と呼びます。
その中で最大のものを見つける、というプログラムです。
…えーとね、2 の累乗だから、必ず偶数ね。半分に割れる。
だから、半分に割った数が最大です。電卓があればすぐ計算できる。
つまり、事実上 2で割るだけのプログラムなのだけど、実験用の機械なので割り算は出来ない。
引き算と、符号による条件分岐くらいしか命令がないんです。
そこで、ひたすら引き算を繰り返し、結果が 0 になれば「割り切れた」と判断します。
疑似的に書くとこういうことです。
for(i=(1<<18)-1;i--;i>0){
j=1<<18;
while(j>0){
j -= i;
}
if(j==0){
answer(i);
exit();
}
}
実際には、「符号を調べる」しかできないから、0チェックとかもややこしいのだろうけど。
このプログラムは、命令 17word、データ 8word の 25word で作られていました。
32word しかメモリがないのだから、これ以上複雑なことは出来ない、というギリギリレベル。
そして、52分かかって正しい結果を出したそうです。
ウィリアムス管という新しいメモリが、1時間近くも正常に動作した、ということでもあります。
これがノイマンアーキテクチャで実行された最初のプログラムです。
1948年の今日、6月21日の出来事でした。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |