Die Verzweigung, von der angenommen wird, dass sie am wahrscheinlichsten ist, wird dann abgerufen und spekulativ ausgeführt. Wenn später festgestellt wird, dass die Schätzung falsch war, werden die spekulativ ausgeführten oder teilweise ausgeführten Anweisungen verworfen und die Pipeline beginnt mit dem korrekten Zweig , was zu einer Verzögerung führt.Verzweigungsvorhersage. Wie funktioniert es in der Tat?
Das Zitat stammt aus Wikipedia.
Warum ist es möglich, ausgeführte Anweisungen immer zu verwerfen? Zum Beispiel, was ist mit einer Situation, in der der erste Befehl in einem falsch vorhergesagten Zweig syscall 0x60
ist (unter Linux ist es eine Unterbrechung: "Programm beenden"). Ich weiß, dass das Programm im Falle einer falschen Vorhersage nicht verlassen wird, sondern wie die CPU es verwerfen kann.
Ich weiß, dass jeder Befehl (auf Mikro-Ops aufgeteilt) muss beendet werden, um abgeschlossen zu sein. Vielleicht ist es wichtig für spekulative Ausführung?
Die ersten Stufen in der Befehlspipeline, die Speicher oder Register nicht ändern (z. B. Anweisungsabruf und -decodierung), können immer ausgeführt werden, ohne dass Probleme beim Verwerfen der Ergebnisse auftreten. – interjay