メッセージ。 - 並列プログラミングについて

# 並列プログラミングについて

2009-09-04 19:09:03変更:下記の文章を公開した当初、「チューリングマシン」と「ノイマン型計算機」をごっちゃにして扱っていましたが、これはふじさわの認識の誤りです。「チューリングマシン」と書いてあった部分をすべて「ノイマン型計算機」に置換しました。指摘してくれたalohakunに感謝します。

そうそう。LLTVの「朝から生テレビ」のときに思ったことと、以前から考えていることの一部が重なった。弾さんが「並列プログラミングをもっとラクに組めるようにならないのか」的なことを言ってたとき。

現代主流のプログラミングパラダイムは、要するにノイマン型計算機の「プログラムを記録しておいて逐次実行」というモデルの枠内で規定されている。

「ノイマン型計算機だけが唯一の解か?」という問いに対する答えをぼくは持っていないけれども、ノイマン型計算機は1つの解であって、現時点で、(ほぼ)すべてのプログラマはノイマン型計算機としてしか、プログラムを書けない。

つまり、どれほどCPUが高速になろうが、ダイの上のCPUが増えようが、自己書き換えのプログラムを書こうが、「メモリに記録したプログラムを逐次実行していく1つのプログラムカウンタと、プログラムが記録された1つのメモリ空間だけが、あなたの最重要の持ち物である」ということに変わりがない。

そう。あなたはプログラムカウンタとプログラムが記録されたメモリ空間を、それぞれ1つずつだけ持っている。

それは、あなたが脳を1つだけ持っていることに似ている。「ほかの何人も、あなたの脳の情報を勝手に書き換えない」と保証されていることこそが、あなたのプログラムがあなたの意図したとおりに動くことの(ほぼ)絶対条件である。

あなたの脳の情報は、あなただけが書き換えられるのだ。たとえ誰かの意見であなたの脳の意見を書き換えるとしても、その書き換えはあなたの許可のもとなされるべきであって、実際にそのように運用が可能である、運用されなければならない。…と、近代では人格をこのように基本規定している。

いや、厳密には「そのように運用が可能である」という説は正しくなく、「自己の内容を完全に把握し他者の書き換えを一切許さない」といったことは人間には不可能なのだが、計算機の世界では、この条件が保障されるよう、(ほぼ)すべての計算機の設計がなされている。それがノイマン型計算機である。(ほぼ)すべてのプログラミングはノイマン型計算機の制約を課される。

そしてこの条件は、並列計算機や並列プログラミングにも適用される。CPUとメモリが複数あるという並列計算機の状況は、ノイマン型計算機が複数走るという状況である。もしこれらが完全に非同期に走っているのなら、全体としてノイマン型計算機になっていない(ノイマン型計算機ではなくなる)(はず)。ノイマン型計算機ではないのだから、それを制御しデバッグするのは難しくなる。

並列計算機においても、基本的にプログラマは計算機をノイマン型計算機として扱うしかないだろうし、そのためには結局、(CPU+メモリ)どうしを同期させる必要がある。プログラムを格納した1つの主(CPU+メモリ)と、そこから非同期実行可能な計算の下請けを受け持つ従(CPU+メモリ)に分けることになるだろう。

そのように並列計算機を同期させてしまうと、本来のパフォーマンスを100%活かせなくなるだろうけど、ノイマン型計算機として…
2009-09-04 19:15:37 / ふじさわ / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。