ノイマン型コンピュータ

チューリングマシンは理論的な骨組みとしては強力であるが、計算機械としては実用的ではなく、その意味では、実用的なコンピュータの構造は、ノイマン型と言われる構造である。ノイマンはJohn Von Neumannと言い、高名な数学者である。しかし、この方式のコンピュータはEckert(エッカート)とMauckly(モークリー)がEDVACを設計した時に考案したもので、ノイマン先生は数学的な裏づけを行ったと言われている。しかし、エッカート氏とモークリー氏もノイマン先生の名声を利用してこのアーキテクチャの箔付けをしているので、ノイマン先生が名声を横取りしたというわけでも無いようである。

ということで、慣用に従って、ノイマン型コンピュータと呼ぶが、ノイマン型コンピュータは、演算装置、制御装置、メモリ、入力装置、出力装置とこれらの間を接続するデータ伝送機構から構成されている。そして、(1)命令カウンタの指すメモリアドレスから命令を読み、(2)命令カウンタを命令の長さ分進めて、次の命令を指すように変更する。(3)そして、読まれた命令を解釈して指定された動作を行うというステップを繰り返し実行する。

ノイマン型コンピュータの特徴は、メモリに命令とデータを格納し、命令を順次、解釈して実行していくという構造となっている点である。それ以前のコンピュータでは、パッチボードなどを使った配線でどのような計算を行うかをプログラムしており、プログラムの変更は配線を繋ぎ変える必要があり手間が掛かっていたが、プログラムをメモリに格納することにより、プログラムの変更が容易になった。また、プログラムを配線ではなく、命令としてメモリに格納することから、どのような形式の命令を備えるかという命令アーキテクチャの概念が生まれてきたと言える。

オリジナルのノイマンアーキテクチャでは、メモリに記憶した命令をプログラム自身で書き変えることにより、ループの中でアクセスするメモリアドレスを順次変更するような使い方が意図されていたが、このような自己書き換え型のプログラムはデバグが非常に難しく、この機能はレジスタを使ったアドレッシングなどに置き換えられてしまった。

ノイマン型コンピュータは、メモリと処理時間に制約がなければ、Turing Completeなマシンであり、Turing Machineよりも、より直感的に処理手続きをプログラムとして記述できるので、その後のコンピュータアーキテクチャの指導的原理となった。

非ノイマン型コンピュータ

ノイマン型のコンピュータは、上記のように問題を解く手順をプログラムとして記述し、そのプログラムを逐次実行するアーキテクチャであるが、それ以外のやり方もあり得る。これらを一纏めにして非ノイマン型のコンピュータと総称する。

問題の記述方法であるが、解を得る手順を記述する手続き的な記述以外に、解が満たすべき条件を記述する方法も考えられる。例えば、「約数とは与えられた数を割り切ることが出来る数であるという記述と、この数の全ての約数を求めよ。」というように問題を記述する。このような問題記述を効率的に処理するコンピュータは現状では存在しないが、上記のような因数分解に関しては、量子コンピュータが実用化されれば、全ての解を並列に計算できると期待されている。

また、神経回路を模擬したパーセプトロンなども、ニューロンに相当する処理ノードが多数の入力と内部状態に基づいて処理を行い、次の処理ノードに出力信号を伝達するというデータフロー的な処理を行っており、非ノイマン型のコンピュータである。

身近な例では、3Dグラフィックスの表示処理は、表示する図形を3角形の集合に分解し、各3角形の頂点の座標を視点から見た座標に変換し、面の色や模様を計算し、更に視点からみて前面にない部分は表示しないというZ-Bufferingを行い、最終的にピクセルに変換してフレームメモリに書くという処理であり、基本的には各機能ブロックが配線によって繋がれてデータフロー的に処理を行っており、ストアードプログラムではない非ノイマン的な処理と言える。また、ビデオのエンコードやデコード、無線通信の信号処理なども、入力データに対して各機能ブロックが決められた処理を行い、その出力を次の機能ブロックに渡すというデータフロー処理が行われており、これも非ノイマン型のコンピューティングと言える。但し、最近では、汎用GPU(General Purpose Graphic Processor)などが出現し、実際の処理はノイマン的に手続きで記述したり、信号処理もDSP(Digital Signal Processor)を用いてノイマン的に行ったりすることが多く、ハイレベルの処理方式としては手続き的では無いが、内部のハードウェアレベルのアーキテクチャとしてはノイマン型というケースも多くなっている。