この単純な構造のマイクロアーキテクチャは、必要とするレジスタ数が非常に少なく、とにかく構成部品の数を減らして、コンピュータのコストを下げたいという目的には向いているが、性能が良いとは言えない。上記の例に見られるように、一つしかないアキュムレータを使いまわすために、多くの場合、演算結果をその都度メモリに書き戻す必要がある。そして、上記の例では、これらのメモリをページ先頭の128語の中に確保して直接アクセスしているが、大きなプログラムでは間接アドレスが必要となり、2回のメモリアクセスを必要とする。これでは、演算器と比べて、メモリアクセスのスピードがそれほど遅くはなかった時代でも性能向上の阻害要因となっていた。
但し、付記しておくと、PDP-8では、(6)で配列要素をロードする場合、自動的に間接参照のアドレスを+1してからロードを行い、+1された値をメモリに書き戻すAutoindex Addressingという機能がある。これを使うと、最初にセットする配列アドレスをA[-1]としておけば、(6)、(8)、(9)、(10)の操作が1命令で実行できるように工夫されている。
汎用レジスタマシン
アキュムレータとメモリ間のデータ転送回数が多いという問題を解決する手段として採られた方法が、複数のレジスタを搭載する方法である。前に述べたコンピュータでは、演算に使用できるレジスタはアキュムレータだけであったために、その内容を入れ替える必要があったが、複数のレジスタがあれば、毎回、メモリに書き戻して、後の処理で使う場合には、また、メモリから読んでくるという、本来は不要なメモリアクセスをしなくて済む。
複数のレジスタを持つ構成。アキュムレータがレジスタ群に置き換わっている。 |
この構成では、前の図のアキュムレータが複数のレジスタを含むレジスタ群に置き換わり、演算器の2つのオペランドはレジスタから供給される構造となっている。
前記のA[0]からA[99]まで合計を求める例では、ループ回数、合計C、配列A[0]のアドレスをそれぞれ、レジスタR[1]、R[2]、R[3]にロードしておくと、ループの部分は次のようになる。
- R[1]を-1し、R[1]に格納
- (1)の演算結果がマイナスならば、終了へジャンプ
- R[3]の内容をアドレスとして、配列要素A[i]をメモリからR[4]にロード
- R[2]+R[4]をR[2]に格納
- R[3]+1をR[3]に格納
- (1)へジャンプ
ということで、この例では4個のレジスタがあれば、メモリアクセスは配列要素を読むという本来不可欠なアクセスだけとなり、処理ステップも11ステップから6ステップと、ほぼ、半減する。また、一般には、演算よりもメモリアクセスの方が遅いので、3個のレジスタと若干の回路の追加により、この例を実行する性能はステップ数の比以上に向上する。