これは理論的な質問ですが、私は固執しています。私はARM ISAとパイプラインデータパスを取る。私は、ブランチプレディクタを使用しています。これは簡単にするために、分岐が取られると予測します。明らかなように、ブランチが実際に取られた場合は機能しますが、それ以外の場合は失敗します。失敗した場合は、すべての変更を元に戻して元に戻す、つまりパイプラインをフラッシュする必要があります。パイプラインをフラッシュする方法は?
どのようにする必要がありますか?
いくつかの値がいくつかのレジスタに書き込まれるとどうなりますか?
次に、どのようにそのレジスタを以前の値にすることができますか?同じことが旗のために行く?
関連:[非常に短いif文の本文であっても、分岐の誤予測によってパイプライン全体がフラッシュされますか?](https://stackoverflow.com/questions/29522431/does-a-branch-misprediction-flush-the-全体的なパイプライン、非常に短期間の場合でも)。ここでのコメントで説明したように、フラッシングの簡単な手法の1つは、誤予測されたブランチが退職するまで待つことです。その後、ロールバックできる正しいイン・オーダー状態がレジスタ状態にあります。それ以外の場合は、誤った予測からの高速リカバリのためにレジスタの名前変更状態をチェックポイントします(例外のような完全なフラッシュよりも速い)。 –
何らかのロールバック/回復メカニズム(通常はレジスタの名前変更を伴う)がなければ、投機的なアウトオブオーダーの実行はできません。 **特別なサポートなしで分岐予測に基づいてフェッチ/デコードすることはできますが、投機的な命令でアーキテクチャ状態の唯一のコピーを変更することはできません。 (Dricの答えが指摘しているように、イン・オーダー・パイプラインは、ライト・バック・ステージまで命令を進めることができます。 –