忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【コンピュータ】分岐の先がわからない!パイプラインの「制御ハザード」|情報処理問題1000本ノック

パイプライン3大ハザードのラストを飾るのがこれ。プログラムの「条件分岐(if文)」が原因で、次に実行すべき命令を見失ってしまう制御ハザードを攻略しましょう。

1. 【 問題 】:パイプライン処理の阻害要因

【 問題 】 CPUのパイプライン処理において、条件分岐命令が実行される際、その分岐結果(どちらのルートに進むか)が確定するまで、次に実行すべき命令を決定してパイプラインに読み込むことができず、処理に遅れ(ストール)が生じる現象はどれでしょうか?

① 制御ハザード (Control Hazard)
② データハザード (Data Hazard)
③ 構造ハザード (Structural Hazard)
④ 割込みハザード (Interrupt Hazard)

2. 正解:

正解: ① 制御ハザード(Control Hazard)

3. 解説:分かれ道の手前で、どっちに行くか決まるまで進めない

パイプラインは、前の命令が実行されている間に、次の命令を「先読み」してどんどん並行処理していくことで高速化しています。しかし、ここに条件分岐命令(if文やループなど)が来ると問題が発生します。

【制御ハザードの発生と、現代CPUの「予測」ワザ】

分岐命令が「条件を満たしているか?」を判定して結果が出るのは、パイプラインの後半(実行ステージなど)です。そのため、結果がわかるまでは、次にAルートの命令を読み込めばいいのか、Bルートの命令を読み込めばいいのかが分かりません。これが制御ハザードです。

■ 現代CPUの対策①:分岐予測(Branch Prediction)
・結果が出るのを待つと遅いので、CPUが過去のパターンから「今回はたぶんAルートに進むだろう」とギャンブルで予測し、そちらの命令を先読みして実行してしまいます。

■ 現代CPUの対策②:投機的実行(Speculative Execution)
・予測が「的中」していれば、そのまま超高速で処理が続きます。
・予測が「外れた」場合は、先読みして途中まで進めていた命令をすべて破棄し、正しいルートの命令を最初から読み込み直します(このロスを分岐ペナルティと呼びます)。
[ これで完璧!3大ハザードのキーワード比較 ]
構造ハザード = ハードウェア(メモリや演算器)の奪い合い
データハザード = 計算に必要なデータがまだできていない(依存関係)
制御ハザード分岐(if文)があるため、次の命令が決まらないココ!

1. 理解のコツ: 「旅行のナビゲーション」をイメージしてください。高速道路を走っていて、この先「左の東京方面」か「右の名古屋方面」かの分岐点があります。運転手(分岐命令)がどっちに行くか決める(結果が出る)まで、助手席のナビ係は次のルートの地図を先読みして準備することができません。この行き先不明による足止め制御ハザードです。
2. 試験対策の視点: 「分岐が存在するため」「他の命令(分岐条件の判定)の結果が必要となり」「次の命令が実行できない」という文脈が来たら制御ハザードが一択です。試験では、対策技術である「分岐予測」「投機的実行」という言葉とセットで出題されることも非常に多いので、まとめて覚えておくと午前試験は無敵になります。


4. まとめ

「条件分岐のせいで、次に進むべき正しいルート(命令)が確定するまでパイプラインが足止めを食らう現象」。これが制御ハザードです。現代のCPUはこの「分岐予測」の的中率が95%以上に達しており、制御ハザードによるロスを極限まで減らす設計になっています。


PR