RISC以前の設計思想
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/28 07:19 UTC 版)
初期のプログラミング環境では、コンパイラは存在しなかった。プログラミングは機械語かアセンブリ言語で行われた。プログラミングをより簡単にするため、コンピュータの設計者はどんどん複雑な処理を行う命令を追加していった。それはつまり、現在ならば高度なプログラミング言語で関数(サブルーチン)レベルで実現されるべきものだった。当時の風潮としてコンパイラの設計よりもハードウェアの設計のほうが簡単であるという考えがあり、結果として複雑なことはハードウェアに担わせることとなった。 高度な命令の追加を必要とする別の要因としてメモリ空間に強い制約があったことが上げられる。メモリは非常に高価で、システムに用意できるメモリ空間が限られていたので、プログラム容量を縮小することが強く要請された。例えば、当時のシステムには数キロバイトしかメモリが搭載されていなかった。そのため、業界は高度で複雑な命令を必要としていたし、命令は可変長になっていて、ひとつの命令でいくつものことをこなし、また、ひとつの命令でデータの転送と演算を同時に行っていた。当時は命令デコードを単純化するよりも命令にいろいろな機能を組み込むことが優先された。 また、当時主流であった磁気コアメモリのアクセス速度は遅かった。そのため、情報の密度を高めアクセスする回数を減らすことで、アクセス速度の問題を軽減できる。 CPU内のレジスタ本数が少なかったのは以下のような理由からである。 レジスタの記憶セルは外部のメモリの記憶セルよりさらに高価だった。当時の集積回路のレベルでは、大きなレジスタセットはチップやボードのエリアの無駄遣いとしか思われなかった。 レジスタ数を増やすと、命令コード内でレジスタを指定するためのビットフィールドが増大し、結果として命令のサイズが大きくなって、貴重なメモリを浪費することになる。 以上のような理由から、CPU設計者は可能な限り一つの命令に多くの機能を詰め込んだ。これにより、例えば、ひとつの命令でメモリからふたつの数値をロードして加算し結果を直接メモリに格納する、ふたつの数値をロードして演算結果はレジスタに格納する、ひとつの数値をメモリからロードしてもうひとつはレジスタにあるものを使い演算結果をメモリに格納する、などの命令が実装されている。 当時の目標は実装されている全ての演算命令で全てのアドレッシングモードを使えるようにすることであった。これを直交性と称した。これはCPUを複雑にしたが、処理を個別に最適化することができるようになったとも言える。つまり、単純な命令のみを使えば高速に動作するようにである。この様な設計思想はRISCの概念が広まった後に、対比してCISCと呼ばれるようになった。 CISC的な設計の極致としてふたつの実例がある。ひとつは6502で、もうひとつはVAXである。25USドルの6502はひとつしかレジスタを持たないが、メモリインタフェースが最適化されているため、高速で動作できる(4MHzのザイログのZ80も同様)。VAXはミニコンピュータであり、ひとつのCPUにつき3個の筐体(ラック)を必要とする。特筆すべきはそのアドレッシングモードの豊富さで、全ての演算命令に全てのアドレッシングモードを組み合わせることができた。
※この「RISC以前の設計思想」の解説は、「RISC」の解説の一部です。
「RISC以前の設計思想」を含む「RISC」の記事については、「RISC」の概要を参照ください。
- RISC以前の設計思想のページへのリンク