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

CPUの高速化技術

学習のポイント

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

キーワード

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


高速化の手段

メモリインタリーブ

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

パイプライン方式

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

パイプライン方式の概念
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│
              └─┴─┴─┴─┴─┴─┘
         1 2 3 4 5 6 7 8 9
                         └実行プロセス数

パイプライン方式の処理時間
 I:実行する命令数(上図では4)
 D:パイプラインの深さ。命令の分割数(上図では6)
 P:パイプラインピッチ。1プロセスの実行時間
とすれば、全命令が完了するまでの実行時間は
  (I+D-1)×P
になります。
パイプラインハザード
命令間の依存関係などによりパイプライン処理を止めたりやり直さなければならなくなることです。
  • データハザード
    ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状態になります
  • 構造ハザード
    同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生します。
  • 分岐ハザード
    条件分岐で実行の流れが二つに分かれる場合、誤った方向に分岐した場合、パイプラインの内容を破棄して正しい分岐の命令群を入れなおすことになります。
スーパスカラ方式
スーパスカラ方式は、複数のパイプラインを処理する演算装置を置いて、並列に動作させます。例えば、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の有効性がいわれるようになりました。
 しかし、どちらも極端なのは不適切です。現在のコンピュータは、双方のよいどことりをしたような構成になっています。

VLIW(Very Long Instruction Word)

機械語命令に翻訳するときの最適化方式の一つです。パイプライン方式などの並行処理をしやすくするために、複数の機械語命令を語長の長い固定長の命令に生成する技術です。VLIWを発展させたものにEPIC(Explicitly Parallel Instruction Computing)があります。