パイプラインハザード 【pipeline hazard】
概要
パイプラインハザード(pipeline hazard)とは、マイクロプロセッサ(MPU/CPU)のパイプライン処理で発生する問題の一つで、命令間の依存関係などによりパイプライン処理を止めたりやり直さなければならなくなること。いくつかの要因によって発生する。パイプライン処理はCPU内部で複数の命令を並行して実行する仕組みで、一つの命令を複数の段階に分割し、それぞれを別の回路で実行する。ある命令がある段階を実行している時、一つ前の命令は次の段階を、一つ後の命令は前の段階を実行できるため、常に数個から数十個の命令の実行を同時に進めることができる。
前後に並んだ一連の命令が常に整然とパイプラインで実行できるとは限らず、何らかの理由で進行が滞ったり、途中まで進めた命令を破棄してやり直さなければならない状況が生じることがある。これをパイプラインハザードという。原因によりいくつかに分類される。
データハザード
ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状況が発生する。これを「データハザード」という。
構造ハザード
複数の命令をパイプラインで並行に処理する過程で、同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生し、処理がつっかえることがある。これを「構造ハザード」という。
制御ハザード/分岐ハザード
条件分岐で実行の流れが二つに分かれる場合、条件の評価を待たずに先行して片方の分岐の命令群をパイプラインに投入することになるが、条件を評価した結果もう一方に分岐することが確定した場合、パイプラインの内容を破棄して正しい分岐の命令群を投入しなおさなければならない。これを「制御ハザード」あるいは「分岐ハザード」という。
(2020.5.17更新)