私は2つの命令は分岐命令データに依存しますか?
Loop: .
.
.
.
SUB R20, R4, Rx
BNZ R20, Loop
を次のように続く機能のための命令のシーケンスを持っているがSUB命令に依存BNZ、ブランチゼロでないデータですか?それとも反依存か?
私は2つの命令は分岐命令データに依存しますか?
Loop: .
.
.
.
SUB R20, R4, Rx
BNZ R20, Loop
を次のように続く機能のための命令のシーケンスを持っているがSUB命令に依存BNZ、ブランチゼロでないデータですか?それとも反依存か?
、はジャンプする検討するが、多くの近代的なアーキテクチャで、この依存性はを行います分岐予測のために、他のデータの依存関係とは異なり、を以下の命令に伝播しないでください。 、予測とのアーキテクチャ上のデータ依存性がにそうではありません、実際にへの分岐を引き起こす
はSUB
後に有効を取る - SUB
が実行される前に、通常は、(すなわち、ジャンプしたりしない)有効になりますSUB
の結果が利用可能になったときにのみ、推測が間違っている場合には、分岐がロールバックされるため、推測がチェックされ、投機的な実行がすべて行われます。
したがって、条件やターゲットにデータ依存関係がある場合、灰色の領域にジャンプが存在します。最も厳しい意味では、それらは依存していますが、予測が機能しているとき(通常はそうです)、そのように振る舞いません。 xor r1, r1, r1
またはfoo32bits >> 32
が存在するグレーの領域のようなものです。厳密な定義によって、これらの命令は入力に依存しますが、これらの特定のケースでは常に答えが同じ(0)になり、一部のCPUがこれを認識します通常の依存関係規則を適用します。
はい、命令間にデータの依存関係があります。分岐命令は、比較とジャンプに分解されます。比較はALUによって評価され、それに応じてPCが更新されます。その比較操作への入力は、他の操作と同じように依存します。枝を登録変更する分岐命令と前の命令(この場合はSUB
)間のデータ依存性が存在する理論的には
具体的には、フラグレジスタで実際に動作していますが、そのレジスタは多くの命令で変更できます。 –
@DavidHoelzer BNZのレジスタ・オペランドを考えると、それはおそらくフラグレジスタがなくMIPSのようなアーキテクチャであり、比較命令と分岐命令は1つにまとめられます。 –
分岐予測の存在下では、ジャンプは通常依存関係チェインの終わりであり、将来の命令は「BNZ」に依存しないことに留意されたい。分岐予測を行わないと、*すべての*後続の命令は分岐を効果的に依存するため、分岐が長い(クリティカルな)依存関係になる可能性があります。分岐予測では、「BNZ」が原則的にデータ依存であるにもかかわらず、プロセッサは、ソースデータを待つことなく結果を推測し、誤って推測されない限り、効果的にそれを切り離す。 – BeeOnRope
ジャンプが予測され、命令の前に起こっても、依然としてデータ依存が存在します。予測を検証するために最終的に行わなければならない比較は、依然としてSUB命令に依存する。 –
@BenBurk:はい、私はそれを明確にしたと思います。分岐は基本的に2つのフェーズで実行されます。フロントフェーズ/フェッチでの予測予測フェーズ、次に実際に実行される分岐ユニット/ ALUでのフェーズです。後半にはデータ依存関係がありますが、依存関係をその命令を超えて実行することはできないため、実際にパフォーマンスに影響を与えることはありません。 – BeeOnRope