データハザード
パイプライン中の命令が、先行命令がまだ生成していないデータを必要とする状態。命令を隙間なく流す際の最も一般的な障害で、対処しなければパイプラインはストールして待つしかない。
種類は三つある。RAW(Read After Write)は本物の依存で、命令Bが、Aがこれから書き込むレジスタを読もうとするため、BはAの結果を待たなければならない。WAR(Write After Read)とWAW(Write After Write)は同じレジスタを再利用するために生じる「偽の」依存で、レジスタリネーミング(別々の物理レジスタを割り当てる)で解消できる。
RAWへの対処にはフォワーディング(バイパス)を使う。結果をレジスタファイルへの書き込みを待たず、計算された場所から必要な場所へ直接送ることで、待ち時間がなくなることも多い。アウトオブオーダー実行は、その間に独立した命令を先に走らせる。CPUがなぜフォワーディングとリネーミングを必要とするのかは、データハザードを理解すれば見えてくる。