2016-10-18 3 views

答えて

3

はジャンプする検討するが、多くの近代的なアーキテクチャで、この依存性はを行います分岐予測のために、他のデータの依存関係とは異なり、を以下の命令に伝播しないでください。 、予測とのアーキテクチャ上のデータ依存性がにそうではありません、実際にへの分岐を引き起こす

SUB後に有効を取る - SUBが実行される前に、通常は、(すなわち、ジャンプしたりしない)有効になりますSUBの結果が利用可能になったときにのみ、推測が間違っている場合には、分岐がロールバックされるため、推測がチェックされ、投機的な実行がすべて行われます。

したがって、条件やターゲットにデータ依存関係がある場合、灰色の領域にジャンプが存在します。最も厳しい意味では、それらは依存していますが、予測が機能しているとき(通常はそうです)、そのように振る舞いません。 xor r1, r1, r1またはfoo32bits >> 32が存在するグレーの領域のようなものです。厳密な定義によって、これらの命令は入力に依存しますが、これらの特定のケースでは常に答えが同じ(0)になり、一部のCPUがこれを認識します通常の依存関係規則を適用します。

+0

ジャンプが予測され、命令の前に起こっても、依然としてデータ依存が存在します。予測を検証するために最終的に行わなければならない比較は、依然としてSUB命令に依存する。 –

+0

@BenBurk:はい、私はそれを明確にしたと思います。分岐は基本的に2つのフェーズで実行されます。フロントフェーズ/フェッチでの予測予測フェーズ、次に実際に実行される分岐ユニット/ ALUでのフェーズです。後半にはデータ依存関係がありますが、依存関係をその命令を超えて実行することはできないため、実際にパフォーマンスに影響を与えることはありません。 – BeeOnRope

2

はい、命令間にデータの依存関係があります。分岐命令は、比較とジャンプに分解されます。比較はALUによって評価され、それに応じてPCが更新されます。その比較操作への入力は、他の操作と同じように依存します。枝を登録変更する分岐命令と前の命令(この場合はSUB)間のデータ依存性が存在する理論的には

+0

具体的には、フラグレジスタで実際に動作していますが、そのレジスタは多くの命令で変更できます。 –

+2

@DavidHoelzer BNZのレジスタ・オペランドを考えると、それはおそらくフラグレジスタがなくMIPSのようなアーキテクチャであり、比較命令と分岐命令は1つにまとめられます。 –

+0

分岐予測の存在下では、ジャンプは通常依存関係チェインの終わりであり、将来の命令は「BNZ」に依存しないことに留意されたい。分岐予測を行わないと、*すべての*後続の命令は分岐を効果的に依存するため、分岐が長い(クリティカルな)依存関係になる可能性があります。分岐予測では、「BNZ」が原則的にデータ依存であるにもかかわらず、プロセッサは、ソースデータを待つことなく結果を推測し、誤って推測されない限り、効果的にそれを切り離す。 – BeeOnRope

関連する問題