Web教材一覧ハードウェアとソフトウェア

CPUの高速化技術

学習のポイント

CPUでの処理を高速化するには、高速な演算素子を用いることや並列処理を行うことが有効ですが、ここでは、CPUの機能を改善することによる高速化技術を対象にします。

キーワード

CPU、高速化技術、パイプライン処理、分岐予測、スーパースカラ、RISC/CISC、キャッシュメモリ、メモリインタリーブ


高速化の手段

パイプライン方式

パイプライン方式とは、演算装置での命令実行プロセスを並列化する技術です。それを発展した方式にスーパスカラ方式スーパパイプライン方式があります。また、これらの方式を効率よく行うためには、分岐予測が必要になります。

パイプライン方式の概念
CPUが命令を実行するプロセスは、
   命令フェッチ→命令解読→有効アドレス計算→オペランドフェッチ→命令実行→結果の格納
のプロセスに分解できます(ここでは、これらをF→D→A→O→E→Sと表記することにします)。
 同時に複数のプロセスを行うことができない場合は、次のように時間がかかります。
     ┌─┬─┬─┬─┬─┬─┐
  命令1│F│D│A│O│E│S│
     └─┴─┴─┴─┴─┴─┼─┬─┬─┬─┬─┬─┐
  命令2            │F│D│A│O│E│S│
                 └─┴─┴─┴─┴─┴─┼─┬─┬─┬─
  命令3                        │F│D│A│O
                             └─┴─┴─┴─

 それに対して、同時に複数のプロセスを行う(それぞれ別の装置で実行する)ことができ、各プロセスの実行時間(クロック数)が同じだとすれば、次のように並行させることができるので、処理が高速化します。このような方式をパイプライン方式といいます。
     ┌─┬─┬─┬─┬─┬─┐
  命令1│F│D│A│O│E│S│
     └─┼─┼─┼─┼─┼─┼─┐
  命令2  │F│D│A│O│E│S│
       └─┼─┼─┼─┼─┼─┼─┐
  命令3    │F│D│A│O│E│S│
         └─┼─┼─┼─┼─┼─┼─┐
  命令4      │F│D│A│O│E│S│
           └─┴─┴─┴─┴─┴─┘
スーパスカラ方式
スーパスカラ方式は、複数のパイプラインを処理する演算装置を置いて、並列に動作させます。例えば、2つのパイプラインがあれば、次のような動作になります。
     ┌─┬─┬─┬─┬─┬─┐
  命令1│F│D│A│O│E│S│
     ├─┼─┼─┼─┼─┼─┤
  命令2│F│D│A│O│E│S│
     └─┼─┼─┼─┼─┼─┼─┐
  命令3  │F│D│A│O│E│S│
       ├─┼─┼─┼─┼─┼─┤
  命令4  │F│D│A│O│E│S│
       └─┴─┴─┴─┴─┴─┘
スーパパイプライン方式
スーパパイプライン方式は、パイプライン方式の各処理プロセスを細分化して、先の命令のプロセスが終了しない間に、次の命令の同じプロセスを並列して行う方式です。
     ┌─┬─┬─┬─┬─┬─┐
  命令1│F│D│A│O│E│S│
     └┬┴┬┴┬┴┬┴┬┴┬┴┐
  命令2 │F│D│A│O│E│S│
      └┬┴┬┴┬┴┬┴┬┴┬┴┐
  命令3  │F│D│A│O│E│S│
       └┬┴┬┴┬┴┬┴┬┴┬┴┐
  命令4   │F│D│A│O│E│S│
        └─┴─┴─┴─┴─┴─┘

実行命令の順序

分岐予測と投機実行
パイプラインなどの方式は、複数の命令が順次実行されることを前提としています。ところが、例えば上の命令2が分岐命令だとすると、それに続く命令は、分岐先の命令になります。命令3や命令4の実行を元に戻して、新しい命令を実行しなければなりません。
 条件分岐で分岐するかどうかを予測することを分岐予測といい、分岐アドレスが実際に決定される前にそれを推察して実行することを投機実行といいます。これが外れると、前に戻って再実行するので効率が悪くなるので、分岐予測の精度を高めるために、多様な工夫が行われています。
アウト・オブ・オーダー実行
通常は、機械語プログラム中の命令の並び順に実行されます(イン・オーダー実行)が、その順番に関係なく、処理に必要なデータが揃うなど、実行が可能になった命令から実行する仕組みです。

ベクトルレジスタ

いくつかの同じ命令が連続しているとき、その情報をベクトルレジスタというレジスタに入れておき、並列実行することにより処理を高速化します。これを発展させれば、プログラムの繰返し部分を対象にすることもできます。
 これを重視したコンピュータをベクトル計算機といいます。大規模な科学技術計算に用いられることが多いのですが、部分的にこのような処理をすることは、パソコンにも取り込まれています。

CISC/RISC

CPUは、命令の構成からCISC(Complex Instruction Set Computer)とRISC(Reduced Instruction Set Computer)に分類できます(実際のCPUは、両者の長所を部分的に取り込んでいます)。

 CISCRISC
命令セット 複雑な機能を持つ多数の命令 単純な機能を持つ少数の命令
プログラムから
生成される命令数
複合した機能が1命令になるので
命令数は少ない
単純な命令の組合せになるので、
命令数は多くなる
命令の長さ 可変長(長い) 固定長(オペランド個数も少ない)
演算装置での
計算回路
マイクロプログラム
(ファームウェア)
ワイヤードロジック
(結線論理)
パイプライン方式
の適用性
命令に要するクロック数が多様なので
採用しにくい
クロック数が同じの命令が多いので
採用しやすい

CISCは命令数が少ないことから高速化できますし、RISCは演算回路が単純なので高速化できます。そのため、どちらが高速であるかは、一概にはいえません。

歴史的には、CISCからRISCへと変化してきました。プログラムをアセンブラで作成した頃には、プログラム作成を容易にするため、コンピュータメーカーが演算回路(ファームウェア)による高速化を図っていたために、CISCが発展したのですが、あまりにも複雑になりました。コンパイラが広く用いられるようになり、プログラマは機械語を意識する必要がなくなったこと、演算回路を比較的単純な回路を適切に組み合わせるほうがむしろ高速になる場合があること、パイプラインなどの高速化技術を適用することなどのため、RISCの有効性がいわれるようになりました。
 しかし、どちらも極端なのは不適切です。現在のコンピュータは、双方のよいどことりをしたような構成になっています。

メモリインタリーブ

メモリをアクセスするときの高速化方式です。メモリを複数のバンクという領域に分割しておき、例えば、1番地、4番地のデータはバンク1、2番地、5番地のデータはバンク2、3番地、6番地のデータはバンク3に格納するようにしておきます。それにより、1番地から3番地までのデータをアクセスするとき、並行して行うことができます。