Für die meisten modernen 80x86 CPUs; Es gibt eine statische Vorhersage (keine Historie, die verwendet werden kann, um eine bessere Vorhersage zu treffen) und eine dynamische Vorhersage (wobei der Verlauf von vorherigen Ausführungen verwendet werden kann).
Für die statische Vorhersage sagt die CPU voraus, dass die Ausführung an der Anweisung unmittelbar nach der JMP RAX
fortgesetzt wird. Ich bin mir nicht ganz sicher, welche CPUs die dynamische Vorhersage für JMP RAX
verwenden (anstatt nur für die Jc
Zweige); aber für diejenigen, die dies tun, würde es die statische Vorhersage überschreiben.
Sobald die CPU eine vorhergesagte Zieladresse hat, wird sie spekulativ ausgeführt, bis sie erkennt, ob sie richtig/falsch vorhergesagt hat. Wenn es richtig vorhergesagt hat, behält es seine ganze Arbeit bei und die JMP RAX
hätte wenig oder keine Kosten.
Wenn die CPU falsch vorhergesagt hat, ist das nicht anders als bei jeder anderen Verzweigungsfehlvorhersage (verwerfen Sie alle Arbeiten, die spekulativ ausgeführt wurden, und gehen Sie zurück zum Fetch/Decodieren beim richtigen RIP).
Beachten Sie, dass wenn Ihre JMP RAX
unvorhersehbar ist oder es zu unwahrscheinlich ist, dass die Anweisung nach ihr das Ziel des Sprungs sein wird; Intel empfiehlt, unmittelbar nach dem Sprung eine PAUSE
oder UD2
zu setzen, um eine unnötige spekulative Ausführung zu verhindern. In diesem Fall würde die CPU stehenbleiben (nichts tun, bis sie das richtige Sprungziel findet).
Beachten Sie auch, dass Sie die MOV RAX, ..
so verschieben sollten, dass sie so schnell wie möglich ausgeführt wird, so dass das Ziel des Sprungs so schnell wie möglich bekannt ist, so dass Sie die Zeit minimieren, die Sie gerade ausgeführt oder spekulativ ausgeführt haben Falsche Sache.
Selbst falsch vorhergesagte bedingte Verzweigungen müssen die Pipeline in modernen Designs nicht vollständig leeren. Die Pipeline kann die korrekte Arbeit behalten, die sie für Anweisungen vor dem falsch vorhergesagten Zweig geleistet hat. Dies gilt für die Intel SnB-Familie und vielleicht Core2; Ich vergesse, aber [Agner Fogs Mikroarch Leitfaden könnte sagen] (http://agner.org/optimize) –