2012-08-13 22 views

Antwort

11

Verzweigungsvorhersage wird durch den Prozessor durchgeführt, um zu versuchen, um zu bestimmen, wo die Ausführung nach einem bedingten Sprung fortgesetzt wird, so dass es die nächste Anweisung lesen (n) aus dem Speicher.

Spekulative Ausführung geht einen Schritt weiter und bestimmt, was das Ergebnis der Ausführung des nächsten Befehls würde (n). Wenn die Verzweigungsvorhersage korrekt war, wird das Ergebnis verwendet, andernfalls wird es verworfen.

Beachten Sie, dass die spekulative Ausführung auch angewendet werden kann, wenn es nicht eine tatsächliche bedingte Verzweigung im Code ist. Der Prozessor kann das Ergebnis aus mehreren Befehlen bestimmen, die normalerweise nacheinander ausgeführt würden, aber die Ausführung könnte beispielsweise durch einen arithmetischen Überlauf-Interrupt gestoppt werden.

0

Nun, ich bin ein Anfänger zu Programmierung und Informatik, aber das ist meine Schlussfolgerung. Der Zweck dieser beiden "Techniken" besteht darin, die Pipeline gefüllt zu halten, um eine Verschwendung von Ressourcen zu vermeiden. Wenn ein Prozessor einen bedingten Testbefehl entgegennimmt, erwarten Sie normalerweise, dass er wartet, bis die Bedingung getestet wurde, bevor Sie mit der nächsten Anweisung fortfahren.

In spekulativer Ausführung führen Sie die Anweisung sowieso ‚die Hoffnung‘, dass der bedingte Test TRUE war stattdessen die Pipeline von Abwürgen und verletzen Ressourcen. Ansonsten verwerfen Sie einfach die Ergebnisse.

In der Verzweigungsvorhersage gehen Sie noch einen Schritt weiter und sagen voraus, ob die Bedingung WAHR ist oder nicht, basierend auf vergangenen Ergebnissen des konditionellen Tests (Sie sagen die Richtung voraus, in die sich Ihr Programm verzweigt).

Hoffe, dass die Dinge klären. Hab die Info von hier und einen Kurs, den ich in diesem Semester mache.

0

Wenn Sie spekulativ etwas tun wollen, erhöhen Sie Ihre Chance, dass es nützlich ist, indem Sie genau vorhersagen, auf welchem ​​Pfad Sie spekulieren.

In einigen Fällen ist die Vorhersage Trivial (z.B. sagen voraus, dass Lasten/speichert nicht segfault). In anderen Fällen ist es schwierig (Verzweigungsvorhersage).

In beiden Fällen müssen Sie die spekulativen Berechnungen zurücksetzen/wegwerfen können, wenn eine Ausnahme auftritt.


Es ist möglich, ohne Vorhersage darüber zu spekulieren, durch spekulativ Anweisungen aus beiden Richtungen eines Zweigs ausgeführt wird, und nur das Ergebnis von der Linie zu halten, die später Wego der richtige Weg gewesen zu sein.

Die aktuelle Hardware nutzt dies nicht für Verzweigungen, aber die gleiche Sache passiert auf einer viel kleineren lokalen Skala für Sachen wie parallele Decodierung von x86-Anweisungen. Decoder beginnen mit der Dekodierung an jeder möglichen Befehlsgrenze und finden erst heraus, welche Startposition korrekt war, nachdem die Dekodierung des vorherigen Befehls die Länge bestimmt hat.