next up previous contents index
Next: コンピュータの将来 Up: 制御部 Previous: マイクロプログラム   Contents   Index

高速化への工夫

コンピュータの開発につれて, 種々の命令はあればあるほど便利であるということから, その数がどんどん多くなる傾向にあった。 当然,それだけ制御線の数も増え,制御部のサイズも大きくなっていった。 ところが,各命令の使用状況を調べたところ, かなりの命令がほとんど使われないことがわかってきた。 このため,使われない命令を整理し, また乗除算のような面積をとる部分を避け, 加減算などの単純な処理の組合せに戻すことにより, 逆に速度を上げようというコンセプトが出てきた。

1980年代初頭より,このコンセプトに基づき設計されたコンピュータが 出現し,それらをRISC(reduced instruction set computer)と言う。 これに対し,従来の複雑な命令を持つものをCISC(complex instruction set computer)と言う。 かつては,高集積が難しく, かつ内部クロックの周期内で外部メモリーにアクセスできたので, レジスタを少なくし,その代わりに外部メモリーを使用してきた。 このため,算術演算も直接メモリーのデータに対して行われることが多く, このため,算術演算命令ですら,外部メモリーアドレスを与えるといったことで, 横に長い複雑な命令セットが好まれて使われてきた。

これに対し現在は,高集積が楽になり,またクロックが速くなり, なるべくメモリーアクセスをしない設計となってきた。 つまりは,多くのレジスタを用意し, 算術演算などはすべて高速なレジスタ間で行うという設計になってきたのである。 こうなると,メモリーとレジスタ間のロードおよびストア以外に, メモリーアドレスを必要とする命令がなくなり, 一気に命令の再整理が進んだのである。

命令はあまり内容を解読しなくても済むよう,固定長となり, また,後に述べるパイプライン化を最大限に利用して, 演算はなるべく1クロック内に納まるように設計された。

一方,プログラム中にある関数やサブルーチン呼び出しに便利なスタックは持たず, これらはコンパイラやアセンブラにより解決するようにした。 つまり,高速化のために,便利さを犠牲にしたのである。 便利さと言っても,末端のユーザから見ると高速なだけ便利であり, あくまでも高級言語から機械語を作り出すまでの翻訳プログラムへのユーザからは見えない負担になっているだけである。

ところで,実際のマイコンのCPUは一時RICS化が進んだが, 多量に売られているものは,RISCの概念を一部取り入れつつも,かなりCISC的である。 それは,技術的に良いものであっても, 過去の資産を生かすためには伝統を継承する方が効率的であるからである。 技術の良いものが必ずしも普及製品とならないのは, 他の家電製品などにも多くの例がある。 ちなみに,RISCは統一的に設計されているためわかりやすく, 本章の制御部の説明はRISCを前提とした。

RISCとあいまって進んだ技術がパイプライン(pipeline)処理と呼ばれるものである。 文字通り,パイプラインの中の石油のように, 隙間なく無駄なく処理をしていこうというものである。

制御部の仕事は概ね

  1. 命令のフェッチとPCの増加
  2. 命令とオプションのデコード
  3. 命令の実行
といった手順を次々に実行していくことにある。 しかし,多くの場合,これら三つの仕事は独立していて, 同じ回路を使うことは少ない。 そこで,最初の命令実行の第1段階が終わって第2段階を実行するとき, 次の命令実行の第1段階を開始してしまおうという考えが成立する。 輪唱のようなものである。 うまく行けば3倍の速度が得られる。 メモリーアクセスのあるフェッチや移動命令では,メモリーの準備を待つ必要があり, これらの命令の周期は必ずしも一致しないが, 一般には,並列実行する方が速くなる。

また,次の命令が前の命令の結果を利用するような場合には, 無駄な作業をしてしまうことになるが,それでも, パイプライン処理をすれば,必ず速くなる。

もちろん,そのためにはCPUの構造も変えなければならない。 例えば,命令レジスタは複数必要になる。 算術演算命令とアドレス計算が, かち合わないようにしなければならないなどの工夫も,必要である。 しかし,CPUの構造を若干変えるだけで, かなりの速度向上が得られることは大きな魅力である。

SIMD(single instruction multiple data)とかベクトル処理(vector processing)と言われる工夫もある。 数値計算に特化したコンピュータでは, 複数の数値に同じ手順の計算を行うことが少なくない。 つまり,数の組(ベクトルと言うことが多い)に対して, 順に同じ手順を行うことになる。 こうした場合,ALUを複数用意し,同時に同じ命令を実行させることにより, 計算速度を上げる工夫である。

現在のコンピュータはこうしたいくつかの工夫のもとに, どんどん高速化されていっていることを理解して欲しい。


next up previous contents index
Next: コンピュータの将来 Up: 制御部 Previous: マイクロプログラム   Contents   Index
Yoichi OKABE 2008-03-29