【コンピュータ】ハードウェアの奪い合い!パイプラインの「構造ハザード」|情報処理問題1000本ノック
CPUの処理を高速化する「パイプライン」。しかし、命令の組み合わせが悪いと、ハードウェア資源の衝突によって処理がピタッと止まってしまいます。その原因となるハザードを攻略しましょう。
1. 【 問題 】:パイプライン処理の阻害要因
【 問題 】 CPUのパイプライン処理において、同時に実行される複数の命令の組み合わせが悪く、同じハードウェア資源(メモリ、レジスタ、演算器など)を同時に使用しようと衝突が発生し、命令を予定通り同時に実行できなくなる現象(ハザード)はどれでしょうか?
① 制御ハザード (Control Hazard)
② データハザード (Data Hazard)
③ 構造ハザード (Structural Hazard)
④ 割込みハザード (Interrupt Hazard)
2. 正解:
正解: ③ 構造ハザード(Structural Hazard / 資源ハザード)
3. 解説:1つの道具を2人で同時に使えない
パイプライン処理は、1つの命令を「命令フェッチ(読み込み)」「デコード(解析)」「実行」「メモリ書き込み」といったステージに細分化し、複数の命令を1ステージずつずらしながら並行して実行する仕組みです。
CPUの足を引っ張るハザード(妨害)には、原因別に以下の3種類があります。
■ 構造ハザード(Structural Hazard)
・原因:ハードウェアの構造上の衝突です。例えば、「命令を読み込むためのメモリ」と「データを読み書きするためのメモリ」が共通の1つしかない場合、ある命令のフェッチと、別の命令のデータアクセスが同時に発生すると衝突し、片方の命令を待たせる(バブルを挿入する)必要が生じます。 ← ココが問題の正解!
■ データハザード(Data Hazard)
・原因:データの依存関係です。前の命令の計算結果を使って次の命令が計算を行う場合、前の計算が終わってレジスタに書き込まれるまで、次の命令は待たなければなりません。
■ 制御ハザード(Control Hazard)
・原因:分岐命令(if文など)です。条件分岐命令が来ると、次に実行すべき命令がどちらになるか(ジャンプするかどうか)が決まるまで、次の命令をパイプラインに投入できなくなります。
★ 現代のCPUでは、命令用のキャッシュメモリとデータ用のキャッシュメモリを物理的に分ける「ハーバードアーキテクチャ」などを採用することで、この構造ハザードが極力起きないように工夫されています。
1. 理解のコツ: 「1つのキッチンで行う料理の分担作業」をイメージしてください。1人が「野菜を切る」、もう1人が「肉を炒める」という別々の作業(パイプライン)を並行して進めています。しかし、2人が同時に「1つしかない電子レンジ(ハードウェア資源)」を使いたくなってしまったとき、作業の手が止まります。この器具の奪い合いによる停滞が構造ハザードです。
2. 試験対策の視点: 「命令の組み合わせが悪い」「同じハードウェア(資源)を同時に使えない」「衝突が発生」というキーワードが来たら構造ハザードが一択です。データ依存ならデータハザード、分岐命令なら制御ハザード。この3大ハザードの区別は、コンピュータの基礎理論・ハードウェア分野における超頻出問題です。
4. まとめ
「複数の命令が同じハードウェア部品を取り合うことで、同時に実行できなくなる現象」。これが構造ハザードです。ハードウェアを増やせば(電子レンジを2台にすれば)解決しますが、コストやチップの面積とのトレードオフになるため、いかに効率の良い構造にするかがCPU設計の腕の見せ所となります。