Book Creator 検索

カスタム検索

2015年5月2日土曜日

ノイマン型、非ノイマン型

ノイマン型コンピュータ 【 von Neumann-type computer 】


フォンノイマン型コンピュータ / ストアードプログラム方式 / stored program computer/ プログラム内蔵方式 / プログラム記憶方式 / プログラム蓄積方式 / プログラム格納方式


プログラムをデータとして記憶装置に格納し、これを順番に読み込んで実行するコンピュータ。現在のコンピュータのほとんどがこの方式を採用している。
この方式は「コンピュータの父」とも呼ばれるアメリカの数学者、ジョン・フォン・ノイマン(John von Neumann)氏によって1946年に提案された方式で、世界最初のノイマン型コンピュータは1949年にイギリスで開発された「EDSAC」である。
1942年にアメリカで世界最初の(電気式)コンピュータであるABCが開発されたが、当時のコンピュータは真空管の配列や配線が計算内容をそのまま反映したものになっており、別の計算を行うためには配線をすべてやり直さなければならず、汎用性が著しく乏しかった。ノイマンは、プログラムをハードウェアから独立させてデータとして外部から与え、汎用のハードウェアでこれを実行させる方式を発表した。これがノイマン型コンピュータである。ソフトウェア(プログラム)という概念の誕生もこのときであった。
ノイマンは自身もノイマン型コンピュータ「EDVAC」の開発に関わっていたが、チーム内のいざこざが原因で開発が遅れ、世界初のノイマン型コンピュータの座は、イギリスのケンブリッジ大学でモーリス・ウィルクス(Maulice Wilkes)らが開発した「EDSAC」に奪われてしまった。実は、ノイマンはEDVAC開発計画には途中から参加しており、プログラム内蔵方式という基本設計はプロジェクト当初から関わっていたジョン・エッカート(John Presper Eckert)とジョン・モークリー(John William Mauchly)によって考案されたと言われている。
EDVACは軍が資金援助しており、軍事機密として開発されていたため、2人をはじめとする開発メンバーは特許や論文を通じて詳細を発表することはなかった。ところが、ノイマンはメンバーに相談もなくEDVACの論理的側面をまとめた論文を自身の名前で発表してしまったため、世間的にはこの方式はノイマンの着想によると認識されるようになった。開発チームの内紛はこの事件が原因といわれている。このため、ノイマンはノイマン型コンピュータを思いついたわけではなく、開発者の着想をまとめて数学的な裏付けを与えただけと言われている。

非ノイマン型アーキテクチャ

現在のほとんどのコンピュータの基本設計にあたる「ノイマン型コンピュータ」とは異なる基本設計のコンピュータの総称。
ノイマン型コンピュータはアメリカの数学者、ジョン・フォン・ノイマン(John von Neumann)氏によって1946年に提案された方式で、主記憶装置(メモリ)にプログラムをデータとして格納し、これを順番に読み込んで実行していく方式である。現在普及しているコンピュータのほとんどがノイマン型コンピュータである。
コンピュータの性能が飛躍的に向上したことにより、メモリから命令を読み出す速度が律速になってしまうといったノイマン型の抱える弱点が目立ってきたため、様々な非ノイマン型の設計が提唱されている。脳神経回路をモデルとしたニューロコンピュータや、量子力学の素粒子の振る舞いを応用した量子コンピュータ、DNAを計算素子に利用するDNAコンピュータなどである。

ノイマン型(-がた、von Neumann architecture)は、計算機の基本的な構成法のひとつである。今日では基本的なコンピュータ・アーキテクチャのひとつとされるが、そもそもコンピュータの要件とされることもあり、このあたりの定義は循環的である。
プログラム内蔵方式デジタルコンピュータで、CPU(中心となるプロセッサ、今日では一つの部品としてまとめて考えることが多いが、オリジナルの報告書では制御装置演算装置に分けている)とアドレス付けされた記憶装置とそれらをつなぐバスを要素に構成され、命令プログラム)とデータを区別せず記憶装置に記憶する。
プログラムカウンタを構成要素に含め、またより抽象的なモデルにおける命令スケジューラの実装とみる[1]ことがある。また、今日では、演算などの命令の実行は演算装置を含む実行ユニットで行われる、というように考えられることもある。
オリジナルの報告書では、入出力について特別に扱っているが、今日の視点からではメモリマップドI/Oを考えれば特に必要ない。また、バスは、報告書では明示的に数え上げてはいないが(言及はある)、今日ではフォン・ノイマン・ボトルネックのように明確に認識される存在である。
ノイマン型の名は、最初にこれを広めたEDVACに関する報告書 w:First Draft of a Report on the EDVAC(1945)の著者がジョン・フォン・ノイマン(ひとり)になっていることに由来する。誰がなんのためにそうしたかについては諸説ある。このアイディア、特にプログラム内蔵方式のアイディアは、ジョン・モークリージョン・エッカートによるENIACのプロジェクト中の検討にその芽があった。ノイマンは(理論的な、とされる)助言役として加わり、執筆者はノイマンであった。誰にどのような功績があったかは諸説ある。
この方式について、以後のコンピュータ研究開発に大きな影響を与えた1946年夏のムーアスクールで講義したのは、ノイマンではなくモークリーとエッカートであったし[2]、ノイマン型という用語は不当だとして、使わない者もいる[3]。一方で、EDSACの設計・建造者であるモーリス・ウィルクスは、ENIACが軍事機密の下にあった時に、ノイマンの草稿がその保護に入らず、多くの人がノイマンを発明者だとみなしたことは不公平な結果だったとし、ノイマンの参加以前に本質的な先進があった[4]、としながらも、数値データと命令を同じ記憶装置の中に置くのは不自然である、とか、そのために必要な遅延記憶装置は信頼性に欠ける、といった、新規技術への疑念[5]に対し、物理学者として、また数学者(計算理論)として、ノイマンが計算機の潜在能力を見抜き、信望と影響力を行使したことは重要だった[6]、とも述べている。
チューリングマシンを、可能な範囲で実現・具体化(実装)するもので、記憶装置を仮に、必要であれば必要なだけ無制限に追加できるものとすれば、計算模型として(「ノイマンマシン」と呼ばれることがある)見た場合チューリング完全とみなせることになる。また、二進法の採用も、要件に含めることがある(二進法と、二進法の基本的な演算(論理演算)の組み合わせで、あらゆるデジタル処理が可能である)。ノイマン型コンピュータを計算模型として定義したものとしてRAMマシンがある。
また、ノイマンの思考はチューリングマシンを通してのものではなく、ゲーデル数からの直接のものではないだろうか、とする論者もいる(ノイマンは不完全性定理とも深くかかわっている)[7]
プログラムのチューリング完全性は、命令の書き換えをしなくても、インタプリタの原理により可能とわかったり、また一般に自己書き換えコードは特殊な技法とされるため、システムソフトウェアを除いて、特に一般ユーザの通常のプログラミングでは、命令とデータは区別するのが一般的である。特に近年ではマルウェア対策として、命令を置いたメモリは書き換え禁止に設定されることがある。また、組み込みシステムなどの専用コンピュータなどで、プログラムを入れ替える必要がないなど、命令とデータを区別するハーバード・アーキテクチャもある。しかし、汎用コンピュータにおけるプログラムの入れ換えなどは、ノイマン型に依っており、システムソフトウェアや性能のため(インタプリタは遅い)などで、依然として重要な原理であることに変わりない。
また性能の点では、バスが細いとそれがボトルネックになってコンピュータ全体の性能がそれで決まってしまう。これをフォン・ノイマン・ボトルネックと言う。
EDVACの開発は遅れ、世界初のプログラム内蔵方式の全電子式コンピュータはSSEM、同じく実用的な実現はEDSACとなった。これらのマシンは「報告書」に影響されたものとされる。EDVACの遅れは、エッカートとモークリーの離脱が大きな理由とされており、離脱の理由は諸説ある。ともあれ、「ノイマンの法則『いつ聞かれても完成は半年後』」などと言われながら、1949年8月に大学から軍の施設に運ばれ、1951年に稼動をはじめた。
ノイマンの草稿の構成に近いマシンとして、EDVACの他に、IASマシンがある。
21世紀初頭におけるコンピュータのほとんどはノイマン型である。これに対し、データフローマシンなどは非ノイマン型と呼ばれる。この場合、「次に実行すべき命令」をバスを通して記憶装置から次々と取り出してくる、というモデルのことを指しており、ふつうハーバード・アーキテクチャなどは非ノイマン型としない。 たとえばNECから、1984年非ノイマン型の画像処理用LSIとしてμPD7281(ImPP:Image Pipelined Processor)が発表されている[8]
また、次のような要素なども、ノイマン型には含まないが、ノイマン型のモディファイの範囲内とみなし、ふつうノイマン型でないとはしない。
池田敏雄が1965年にコンピュータについてまとめた報告[9]では、電子計算機の最も基本的な概念はフォン・ノイマンによって確立されたプログラム内蔵方式で、(主)記憶装置にアドレスを付け命令をそれに記憶しシーケンシャルに取り出して実行すること、としている。またノイマンは「コンピュータはすべからく2進法たるべきである」と言っている、としている(この点については十進演算を併用すべき場合とのバランス感覚が必要と、少々辛い見解を池田敏雄は示している)。

0 件のコメント: