コンピュータの開発につれて, 種々の命令はあればあるほど便利であるということから, その数がどんどん多くなる傾向にあった。 当然,それだけ制御線の数も増え,制御部のサイズも大きくなっていった。 ところが,各命令の使用状況を調べたところ, かなりの命令がほとんど使われないことがわかってきた。 このため,使われない命令を整理し, また乗除算のような面積をとる部分を避け, 加減算などの単純な処理の組合せに戻すことにより, 逆に速度を上げようというコンセプトが出てきた。
1980年代初頭より,このコンセプトに基づき設計されたコンピュータが 出現し,それらをRISC(reduced instruction set computer)と言う。 これに対し,従来の複雑な命令を持つものをCISC(complex instruction set computer)と言う。 かつては,高集積が難しく, かつ内部クロックの周期内で外部メモリーにアクセスできたので, レジスタを少なくし,その代わりに外部メモリーを使用してきた。 このため,算術演算も直接メモリーのデータに対して行われることが多く, このため,算術演算命令ですら,外部メモリーアドレスを与えるといったことで, 横に長い複雑な命令セットが好まれて使われてきた。
これに対し現在は,高集積が楽になり,またクロックが速くなり, なるべくメモリーアクセスをしない設計となってきた。 つまりは,多くのレジスタを用意し, 算術演算などはすべて高速なレジスタ間で行うという設計になってきたのである。 こうなると,メモリーとレジスタ間のロードおよびストア以外に, メモリーアドレスを必要とする命令がなくなり, 一気に命令の再整理が進んだのである。
命令はあまり内容を解読しなくても済むよう,固定長となり, また,後に述べるパイプライン化を最大限に利用して, 演算はなるべく1クロック内に納まるように設計された。
一方,プログラム中にある関数やサブルーチン呼び出しに便利なスタックは持たず, これらはコンパイラやアセンブラにより解決するようにした。 つまり,高速化のために,便利さを犠牲にしたのである。 便利さと言っても,末端のユーザから見ると高速なだけ便利であり, あくまでも高級言語から機械語を作り出すまでの翻訳プログラムへのユーザからは見えない負担になっているだけである。
ところで,実際のマイコンのCPUは一時RICS化が進んだが, 多量に売られているものは,RISCの概念を一部取り入れつつも,かなりCISC的である。 それは,技術的に良いものであっても, 過去の資産を生かすためには伝統を継承する方が効率的であるからである。 技術の良いものが必ずしも普及製品とならないのは, 他の家電製品などにも多くの例がある。 ちなみに,RISCは統一的に設計されているためわかりやすく, 本章の制御部の説明はRISCを前提とした。
RISCとあいまって進んだ技術がパイプライン(pipeline)処理と呼ばれるものである。 文字通り,パイプラインの中の石油のように, 隙間なく無駄なく処理をしていこうというものである。
制御部の仕事は概ね
また,次の命令が前の命令の結果を利用するような場合には, 無駄な作業をしてしまうことになるが,それでも, パイプライン処理をすれば,必ず速くなる。
もちろん,そのためにはCPUの構造も変えなければならない。 例えば,命令レジスタは複数必要になる。 算術演算命令とアドレス計算が, かち合わないようにしなければならないなどの工夫も,必要である。 しかし,CPUの構造を若干変えるだけで, かなりの速度向上が得られることは大きな魅力である。
SIMD(single instruction multiple data)とかベクトル処理(vector processing)と言われる工夫もある。 数値計算に特化したコンピュータでは, 複数の数値に同じ手順の計算を行うことが少なくない。 つまり,数の組(ベクトルと言うことが多い)に対して, 順に同じ手順を行うことになる。 こうした場合,ALUを複数用意し,同時に同じ命令を実行させることにより, 計算速度を上げる工夫である。
現在のコンピュータはこうしたいくつかの工夫のもとに, どんどん高速化されていっていることを理解して欲しい。