制御ハザードとは
制御ハザード(Control Hazard)とは、CPUのパイプライン処理において、分岐命令やジャンプ命令などにより次に実行すべき命令のアドレスが確定しない状態で発生する問題のことです。主にRISC型プロセッサなど、高速化のために命令を並列的に処理するCPUで重要な概念となります。
制御ハザードは、データハザードや構造ハザードと並ぶ「パイプラインハザード」の一種であり、性能低下の要因となります。
制御ハザードが発生する原因
制御ハザードの主な原因は分岐命令です。条件分岐命令では、条件判定が完了するまで次に実行する命令が確定しません。
しかし、パイプライン処理では次の命令を先読みして処理を進めるため、誤った命令を読み込んでしまう可能性があります。この状態が制御ハザードです。
- 条件分岐命令(if文、ジャンプ命令)
- 分岐先アドレスが未確定な状態
- 命令の先読み実行との衝突
制御ハザードが引き起こす問題
制御ハザードが発生すると、CPUは誤って読み込んだ命令を破棄し、正しい命令を再度読み込む必要があります。この処理により、次のような問題が生じます。
- パイプラインの停止(ストール)
- 命令の無駄な実行
- CPU性能の低下
特に分岐命令が多いプログラムでは、制御ハザードの影響が顕著になります。
制御ハザードへの代表的な対策
制御ハザードを軽減するため、CPUではさまざまな対策が採用されています。
1. パイプラインの一時停止(ストール)
分岐結果が確定するまでパイプラインを停止する方法です。実装は簡単ですが、性能低下が大きくなります。
2. 分岐予測
分岐結果を予測して先に命令を実行する方法です。予測が当たれば性能は向上しますが、外れた場合は再実行が必要です。
3. 分岐遅延スロット
分岐命令の直後の命令を必ず実行する方式で、コンパイラ最適化と組み合わせて利用されます。
制御ハザードと試験対策
基本情報技術者試験や応用情報技術者試験では、「制御ハザード=分岐命令が原因」という対応関係を正確に理解することが重要です。データハザード・構造ハザードとの違いも併せて押さえておきましょう。
まとめ
制御ハザードは、パイプライン処理において分岐命令が原因で次の命令が確定せずに発生する問題です。CPU性能に大きな影響を与えるため、分岐予測や遅延スロットなどの対策が用いられています。CPUアーキテクチャを理解するうえで欠かせない重要な概念です。
コメント