AMDs Comeback - Ryzen 7 1800X im Test

Prozessoren | HT4U.net | Seite 6

Instruction Fetch und Sprungvorhersage


Starten wollen wir dabei mit der Befehls-Pipeline, also jenem Element in einem Prozessor, welches die Daten und Befehle aus den Caches holt und dann weiterverarbeitet.

Zunächst einmal müssen wie erwähnt die Befehle geladen werden. Dies übernimmt die sogenannte Instruction Fetch Unit, die aus dem L1-Befehls-Cache 32 Byte pro Taktzyklus holen kann, was mehr als 4 Instruktionen pro Takt entspricht (wie bei Bulldozer). Um eine hohe Leistung zu erzielen, müssen die geholten Instruktionen natürlich auch die "richtigen" sein, was gleich zu der Frage führt, ob es auch "falsche" Instruktionen gibt.

Bild: AMDs Comeback – Ryzen 7 1800X im Test


Nehmen wir einmal an, in unserem Programm gibt es eine Verzweigung, z. B. soll je nachdem, ob das letzte Ergebnis Null war oder nicht, etwas anderes ausgeführt werden. Zum Zeitpunkt, wenn diese Befehle geladen werden, ist das Ergebnis (ob Null oder nicht) jedoch noch nicht verfügbar. Die Fetch-Unit muss also "intelligent" entscheiden können, welche Befehle geladen werden. Sind es die "falschen", müssen diese später aus der Pipeline entfernt werden, d. h., man muss noch einmal zurück zur Verzweigung und von dort aus neustarten. Dies verringert die Leitung (langsamer) und kostet unnötig Energie (mehr Verbrauch).

Bild: AMDs Comeback – Ryzen 7 1800X im Test
Damit dies nur selten passiert, gibt es eine Sprungvorhersage (engl. Branch Prediction). Auf diese hat AMD bei Zen besonderen Wert gelegt und bewirbt sie vollmundig als "Neural Net Prediction", also als intelligente und über die Zeit dazulernende Vorhersageeinheit. Dahinter verbirgt sich ein "Hash Perceptron Predictor", den man so ähnlich auch schon bei den letzten Bulldozer-Inkarnationen gesehen hat. Kurz gesagt soll die aktuelle Position im Programmcode mit der Historie des Sprungziels verknüpft werden, um eine gute Sprungvorhersage zu verwenden. Dabei verwendet AMD nun Hash-Werte, die weniger Platz benötigen, wodurch mehr Werte für eine bessere Vorhersage zur Verfügung stehen.

Bild: AMDs Comeback – Ryzen 7 1800X im Test
Darüber hinaus soll es diese Einheit auch ermöglichen, viele "richtige" Befehle vorab zu laden (engl. Prefetching), bevor diese wirklich benötigt werden. All dies verspricht in der Theorie mehr Leistung und weniger Verbrauch, ist in der Praxis aber oft nur schwer zu überprüfen.

Interessant ist noch die Lage des Translation-Lookaside-Buffers (TLBs). Dieser Puffer speichert für bereits bekannte Addressen die Umrechnung von einer logischen Adresse (wie sie von Programmen verwendet wird) und einer physikalischen Adresse (wie sie die Hardware verwendet). Die TLBs hat AMD so in die Sprungvorhersage integriert, dass die physikalischen Adressen nun früher zur Verfügung stehen. Damit einhergehend kann früher mit dem Prefetching begonnen werden, was schlussendlich dazu führt, dass früher Befehle zur Abarbeitung bereitstehen.