パイプラインハザードは、命令を重ねて実行するとき、予定どおり処理を進められなくなる要因です。この記事では3種類の見分け方を短く整理します。
何が足りない・決まらないのかで分類
| 種類 | 原因 | 典型例 | 代表的な対策 |
|---|---|---|---|
| 構造 | 必要な資源が同時利用に対応できない | 単一ポートの共用メモリで命令取出しとデータアクセスが重なる | 資源の分離・複数化、待機 |
| データ | 先行命令とのデータ依存 | 直前の演算結果がまだ利用できない | フォワーディング、ストール、命令の適切な並べ替え |
| 制御 | 次に実行する命令の位置が未確定 | 条件分岐の結果を待つ | 分岐予測、早期判定、必要な待機・取消し |
「同じメモリを使う」「同じレジスタを使う」というだけで必ず待ちが発生するとは限りません。資源構成や値を使う時点を確認します。
データ依存のRAW・WAR・WAW
- RAW(Read After Write):後続命令が、先行命令の書く値を読む。新しい値が必要です。
- WAR(Write After Read):後続命令の書込みが、先行命令の読出しより先に行われると問題になります。
- WAW(Write After Write):同じ対象への書込み順序が逆転すると、最終結果が変わる場合があります。
これらが問題になる条件はCPUの構成次第です。典型的な単純な順序実行パイプラインでは、WAR・WAWは発生しない構成があります。全てのCPUで3種類が必ず起きるとは覚えません。
ストール・フォワーディング・フラッシュ
- ストール:安全に進められるまで、関連する処理を待たせること。
- フォワーディング:レジスタへの書戻しを待たず、生成された結果を必要な段階へ直接渡すこと。
- フラッシュ:分岐予測が外れた場合などに、不要になった経路の命令を取り消すこと。
フォワーディングだけで、ロード直後の利用などの待ちが全てなくなるとは限りません。分岐予測も必ず当たるわけではありません。ハザード1回当たりの遅延は、段構成や予測・転送の仕組みによって変わります。
確認問題
条件分岐の結果が決まっておらず、次に取り出すべき命令を確定できない問題は、どのハザードでしょうか。
解答・解説を見る
制御ハザードです。資源の不足なら構造、データの利用タイミングならデータ、進む先の未確定なら制御、と整理します。
具体例と計算へ進む
パイプラインの仕組みから処理時間まで復習したい方へ。
関連noteでは、スループット、段数・命令数を使う計算、ストール、3種類のハザードを扱っています。
教材の公開範囲・価格などはリンク先でご確認ください。

コメント