プロセッサが命令を実行するためには、命令解釈・演算・メモリアクセス等を行う必要があり、各々の処理をこなす回路のユニットが存在するが、1つの命令がこれら全てのステップを終えてから次の命令を実行する方式(逐次実行方式)では命令が現在いるステップ以外のユニットは仕事をしない。
これらのユニットを有効利用するために、ユニット間にフリップフロップを挿入して分割し、クロック毎に各ユニットが独立して動作できるようにした上で次々に命令を投入・並列実行する方式をパイプライン処理と言う。これにより各ユニットのハードウェア資源を有効に活用することができ、処理速度が向上する。
ただし、パイプライン制御は、必ずしも高速化ができるとは限らない。 パイプラインでは、分岐命令の分岐先が決まる前に,予測した分岐先の命令の実行を開始する場合(投機実行)があるため、作成されたプログラムの実行順番どおりに実行されるかどうかは、わからないからです。 たとえば、分岐命令によって、プログラムの実行順番が変わってしまう場合もある。 このように、先読みされた命令を破棄せざるを得ない状態となることを、パイプラインハザードという。 ハザードが発生すると処理速度の低下に繋がる。
パイプラインの方式のステージをさらに細かく分けて並列処理を行う方式。
処理装置内部の構成要素を多重化して、複数のパイプラインのステージを用意する方式。
1つの命令に複数の演算操作を指定することで高速化する方式。
プロセッサの高速化技法の一つとして、コンパイルの段階で同時に実行可能な複数の動作をまとめて一つの複合命令とし、CPI (Cycles Per Instruction) 低減を図る方式。
並列に4個の演算器を並べる。それぞれの演算器に対して、たとえば、32ビット幅の命令を供給する。すると、32ビット幅の命令を4個一度に供給するのだから、全体としては128ビット幅の命令長になる。命令長がやけに長いので、「Very Long Instruction Word」の頭文字をとって「VLIW」というわけだ。実に単純明快。そのうえ、一度に1つの命令しか実行できないスカラープロセッサに比べれば、この例の場合であれば、同時に4つの命令を実行できるのだから、性能がよいことも明らかだろう。Crusoe CPU
● VLIWとスーパースカラーの違い
VLIW では、コンパイラによって事前に並列に実行できる処理をまとめ1つの命令としてプロセッサに与える。それに対しスーパースカラーでは、プロセッサ内部のスケジューラがプログラムの並列性を引き出し、同時処理を行う。
マイクロプロセッサ(MPU)の高速化手法の一つ。依存関係にない複数の命令を、プログラム中での出現順序に関係なく次々と実行すること。
プログラムに書かれた順番通りに実行する方式をイン・オーダー実行という。
●イン・オーダー実行プロセッサ
イン・オーダー実行プロセッサでは、通常次のようなステップで命令が実行された。
●アウト・オブ・オーダー実行プロセッサ(OoO)
アウト・オブ・オーダー実行では、命令及び実行結果を一時溜めておく場所を作り、命令の実行を次のように細分化する。
アウト・オブ・オーダー実行の鍵になるコンセプトはある命令の実行に必要なデータが得られない状態でも、プロセッサの動作を止めず他の命令を実行し続けられるようにすることである。インオーダ実行では必要なデータが全部揃わないと(2)の段階で実行が止まってしまう。この点を改善したのがアウト・オブ・オーダー実行である。
アウト・オブ・オーダー実行プロセッサはこの半端な時間(スロット)を他の「準備ができている」命令に当て、後に実行結果の順序を修正することで、順序通り命令を実行したのと同じ結果が得られるようにする。本来のプログラムコードに書かれた命令の順序は「プログラム順」(program order)と呼ばれるが、この種のプロセッサの内部では「データ順」(data order)で扱われる。つまり、データないしオペランドがプロセッサのレジスタに用意される順序である。これら二種類の順序間の変換を行い、同時に出力に論理的な整合性を持たせるためには相当複雑な回路が必要である。プロセッサはまるでランダムな順序で命令を実行するように見える。
命令パイプラインが深くなり、主記憶装置(あるいはキャッシュメモリ)に比べプロセッサが高速になる程アウト・オブ・オーダー実行の威力は増す。例えば、現代のプロセッサはメモリの数倍の速さで動作しており(=メモリを読み書きするのに沢山のサイクル数を必要とする)、バス上にデータが乗るのを待つのは非常にサイクル数を無駄にすることになる(ノイマンズ・ボトルネック参照)。
www.it-shikaku.jp