パイプラインハザードは、パイプライン処理において、命令の実行を妨げる潜在的な問題を指します。大きく分けて、構造ハザード、データハザード、制御ハザードの3種類があります。
構造ハザード (Structural Hazard)
- 複数の命令が同時に同じハードウェアリソース(例えば、メモリや演算器)を必要とすることで発生します。
- 例えば、命令フェッチとデータアクセスを同時に行う必要がある場合、メモリが1つしかないと、どちらかの命令が待たされることになります。
データハザード (Data Hazard)
- 命令間のデータの依存関係によって発生します。
- ある命令の結果が、後続の命令の入力として使用される場合、結果が確定する前に後続の命令が実行されてしまうと、誤ったデータが使用される可能性があります。
- このハザードは、Read-After-Write (RAW) ハザード、Write-After-Read (WAR) ハザード、Write-After-Write (WAW) ハザードの3種類に分類されます。
制御ハザード (Control Hazard)
- 分岐命令やジャンプ命令など、実行する命令の流れを制御する命令によって発生します。
- 分岐命令の実行結果によって、次に実行する命令が決定されるため、分岐が確定する前に次の命令をフェッチしてしまうと、不要な命令をフェッチしてしまう可能性があります。
- このハザードは、分岐ハザードとも呼ばれます。
これらのハザードを解決するために、パイプラインストールやパイプラインの順序変更、データフォワーディングなどの手法が用いられます。
コメント