1

パイプライン化されたプロセッサを研究すると、分岐が行われるか行われないかを予測し、分岐が行われるかどうかを判断する前に「暫定」のような顕著な命令を挿入し、間違っていると推測した場合はそれらを「押しつぶす」ことについて言及しています。

それらをどのようにつぶしますか?書き返さないだけですか?分岐であるかどうかを判断してから、実行されたかどうかを判断するまでの間に、いくつの命令を挿入できますか。1つだけだと思います-IDのブランチであることがわかり、EXで取得されたかどうかがわかるので? 押しつぶせるインストゥルメントは 1 つだけですか?

IF->ID->EX->MEM->WB

4

2 に答える 2

4

誤って予測された分岐の陰にある命令は偽物であり、誤りであり、決してユーザーに見られてはなりません (パイプライン処理はちょっとしたごまかしです。外界に対しては、CPU が一度に 1 つの命令を実行するふりをします。完全な順序)。したがって、これらの投機的命令は、メモリへの書き込みやレジスタの値の変更などのアーキテクチャ上の影響を与えずにクリアする必要があります。

実行は順序どおりに行われ、最終的な分岐解決は EX でわかっているため、パイプライン内の次の命令に自分自身をキャンセルするように指示する十分な時間があるはずです (効果的にそれらをバブルに置き換え、マシンはそれらに対して何もしません)。次のパイプ ステージのいずれかで)。マシンに影響を与える段階はさらに先にあるため、悪い指示が早すぎる段階でマシンに到達することはありません。これは、順不同のマシンではさらに複雑になりますが、それは別の話です。唯一の無駄な作業は前の段階にあり、そのうち 2 つ (IF + ID) があり、おそらく (設計によっては) 次のサイクルで IF にフェッチされようとしている次の命令があります (そうしない場合)。分岐後にプログラム カウンターを修正する時間がありません。

予測を誤った分岐に続く不正な命令をクリアする行為は、通常、フラッシュ、クリア、またはスカッシングと呼ばれます (これらの用語はコンピューター アーキテクチャでも異なる意味を持つ場合があるため、図による説明であるほど技術用語ではありません)。

于 2014-10-26T18:27:15.337 に答える
1

パイプライン化されたスーパースカラー プロセッサの場合、分岐予測がより影響力があると言って、Leeor の回答に追加します。ダイナミズム (OoO に由来) とスペキュレーション (分岐予測に由来) は 2 つの別個の概念ですが、それらの相互作用は複雑です。さらに、これらは通常、現代のアーキテクチャーでは両方とも一緒に表示されるため、混同されることがあります。

検討している単純な 5 ステージのパイプラインでは、ID と EX の間に 1 クロック サイクルかかり、分岐が行われたかどうかを判断します。より複雑なアーキテクチャでは、予測ミスのペナルティは数十クロックサイクルのオーダーであり、アーキテクチャがスーパースカラーである場合、さらに多くのフェッチされた命令に対応する可能性があります。

フェッチされた命令のこのような大きなセットを考慮すると、スカッシングでさえ複雑になります。たとえば、正しいかどうかわからない値のストアがある場合はどうなるでしょうか? 別のブランチなどに遭遇した場合はどうなりますか?

さらに、予測ミスはパフォーマンスの点で大きなヒットに対応するため、このペナルティを軽減するために、選択的リプレイ値予測などのより高度な手法が使用されます。

于 2014-10-30T03:49:08.370 に答える