CPUの性能向上のための他の方法
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/28 07:19 UTC 版)
「RISC」の記事における「CPUの性能向上のための他の方法」の解説
一方で、CPUの性能を向上する技術が導入されていった。 1980年代初頭、既存の設計技法は限界に来ていると考えられていた。将来の性能向上は半導体プロセスの進歩に依存するしかないが、それが限界に達するということはつまりチップ上の機能を削減するということである。チップの複雑性はそのままであるが、チップの面積を縮小することで動作周波数を上げることができる。通信リンクを組み込んだ並列コンピューティングの研究に少なからぬ投資が行われた。高速なチップを作る代わりにたくさんのチップを並べ、処理すべき問題を分割して各チップに割り当てるのである。 しかし、当初の恐れは杞憂であった。1980年代後半にはCPUの性能を向上させるいくつかの技術が導入された。ひとつは、1960年代よりメインフレーム用など高価なCISCのCPUで採用されていた技術であるが、命令の処理を複数のステップに分割する命令パイプラインや、その効果を高める分岐予測などである。これにより、複数の命令のそれぞれ別の処理ステージを同時に実行することで命令の並列実行を実現するのである。一般的なプロセッサは、命令を読み込み、デコード(解釈)し、必要ならばデータをメモリから取ってきて、実際の処理を実行し、結果を指定された場所に格納する。パイプラインという手法が生まれたのは、命令を読み込んだら、その命令の処理の完了を待たずに次の命令を読み込むことができるという洞察からであった。そうすると、後続の命令を読み込んでいる一方で先行の命令をデコードすることが可能となり、そして、次のサイクルでは実行、デコード、命令読み込みの三つとなり、実質的に複数の命令が並行して処理されていることになる。個々の命令を見ると、処理の完了までに数サイクルかかっていて決して高速ではない(レイテンシは短縮しない)が、次の命令との関係を見れば順次命令が実行され、1サイクル毎に命令の実行が終了していくことになる(スループットは高い)。これにより高速なシステムができ、プロセッサ内の資源が効率的に利用される。 もうひとつの解決法は処理ユニットをプロセッサ内に複数装備し、複数の演算を同時に行うスーパースケーラプロセッサの概念である。連続して読み込んだ複数の命令を、複数の処理ユニットに同時に投入して並列処理を行う。ただし、ある命令を実行するためには前の命令の実行結果を用いる(依存性がある)場合がしばしばあり、常にこの方法で性能を向上できるとは限らない。 パイプラインを導入したりスーパースケーラ化する手法は、単純なRISCアーキテクチャの設計に、調停機能や複数のデータパス、パイプラインレジスタを追加して性能を向上させようというものである。CISCでは複雑な命令を実装して、これにより一挙に複数の処理を行うことで性能を高めようとするのと対照的である。チップの面積は有限なので、性能向上のための仕組みを追加するためには何かを削らなくてはならないが、基本的なRISCアーキテクチャのCPUは非常に単純で面積が小さく、追加機能を実装する面積を確保するうえで非常に好都合だった。初期のRISCの性能は低かったが、これらの設計手法を取り入れることによって1980年代後半にはCISCを大きく引き離す性能を達成した。半導体プロセスの進歩によってこれらの手法をCISCに導入できるようになるには1990年代初頭のPentium、Pentium Proまで待たねばならなかった。 RISCチップはそのコアを実現するのに必要なトランジスタ数が少なくて済むため、以下のような様々な機能や要求をチップに取り入れることができた。 レジスタセットの容量増加 内部並列性を向上させるための調停機構 巨大なキャッシュの追加 マイクロコントローラ向けのI/Oやタイマの追加 ベクタープロセッサ (SIMD命令) の追加 何も付加しないで、低電力化や小型化を指向する RISCデザインで一般的な特徴は以下の通りである。 固定命令語長と統一されたビットフィールド設計 ビットフィードの構造を可能な限り統一し、オペコード・オペランドが常に同じビットに配置される様にして、命令デコードが高速に行える様にする レジスタが基本的に全て同等で汎用である コンパイラがレジスタに変数の割り当てを行うさいに制約がなく、コンパイラの実装が容易になる。ただし、整数用と浮動小数点数用レジスタは基本的に区別される 単純なアドレッシングモード オペランドとして指定したレジスタをポインタとしてメモリアクセスに使用したり、レジスタ値にオフセットを加えて実効アドレスを得るモードを持つ。それより複雑なアドレッシングは、演算命令を組み合わせて実効アドレスを算出した結果をレジスタに入れて使用する。 ハードウェアがサポートするデータ型が少ない 例えば、CISCには文字列やビットストリングを扱う命令を備えたり、多項式とか複素数を扱うものもあった。そのような命令はRISCには見受けられない。なお、最新のアーキテクチャではSIMD命令向けに、複数の値をパックしたデータ形式もサポートする。 RISCはハーバード・アーキテクチャを実現したものとも言われる。概念的に命令コードのフローとデータのフローが分離されているからである。これによって、命令キャッシュとデータキャッシュへ同時にアクセスすることができ、性能向上に寄与する。 初期のRISCの設計には分岐遅延スロットの仕組みも備えられていた。これは分岐命令や条件分岐の直後の命令を指し、条件分岐で条件の成立の分岐するしないに関わらず、必ず実行される(逆に言えば分岐の効力が発揮されるのが遅れる)。これは、分岐命令の処理中もALUに仕事をさせて、分岐にかかるオーバーヘッドを隠蔽するための手法である。現在は、CPUの速度とメモリアクセスの差が広がり、またスーパースカラ構成をとる場合には遅延スロットに適切な個数が変わるなど、実装の影響を受けるために良くない仕組みと考えられていて、最近のRISCでは実装が避けられている。
※この「CPUの性能向上のための他の方法」の解説は、「RISC」の解説の一部です。
「CPUの性能向上のための他の方法」を含む「RISC」の記事については、「RISC」の概要を参照ください。
- CPUの性能向上のための他の方法のページへのリンク