データハザードとは、パイプライン処理において、ある命令の実行結果を別の命令が利用する際に、実行結果がまだ確定していないために生じる問題のことです。具体的には、後続の命令が、前の命令によって書き込まれる前のレジスタ値を読み取ってしまうことで、誤った結果を導いてしまう状態を指します。
詳細:
- パイプライン処理:CPUは、命令を複数のステージ(命令フェッチ、命令デコード、実行、メモリアクセス、ライトバックなど)に分割し、並行して実行することで処理速度を向上させるパイプライン処理を行います。
- データ依存性:パイプライン処理では、ある命令の実行結果が、後続の命令の入力となることがあります。この時、後続の命令が、まだ書き込まれていない結果を読み取ってしまうと、データハザードが発生します。
- 例:例えば、命令Aがレジスタに値を書き込み、命令Bがそのレジスタ値を読み込む場合、命令Bが命令Aよりも先に実行されてしまうと、命令Bは古い値を読み込んでしまい、誤った計算結果となってしまいます。
- 解決策:データハザードを解決するためには、パイプラインを一時停止(ストール)させたり、データ転送パスを工夫したり、パイプラインの順序を入れ替えたりするなどの方法が用いられます。
コメント