Welche Art der Verzweigungsvorhersage ist wichtiger?


11

Ich habe beobachtet, dass es bei der Verzweigungsvorhersage zwei verschiedene Arten von Zuständen gibt.

  1. Bei der superskalaren Ausführung, bei der die Verzweigungsvorhersage sehr wichtig ist, und hauptsächlich bei der Ausführungsverzögerung und nicht bei der Abrufverzögerung.

  2. In der Anweisungspipeline, wo das Abrufen problematischer ist, da die Anweisungen erst später ausgeführt werden.

Welche davon ist sehr wichtig (wie in welcher davon ist heutzutage in der CPU wirklich wichtig)? Wenn beide gleich wichtig sind oder wenn die zweite wichtiger ist, warum haben wir dann keine zwei Anweisungspipelines (wahrscheinlich von halber Länge) und wählen Sie dann abhängig von den Zweigen einfach einen von ihnen aus und starten Sie die Population erneut von der Anfang?


1
Vielleicht sind beide wichtig, abhängig von den Umständen?
Raphael

Antworten:


6

Ich weiß nicht, welcher Fall vorherrscht, aber ich möchte einige Gedanken zu Ihrem Vorschlag für Doppelpipelines machen.

Zunächst benötigen Sie den doppelten Draht, der die doppelte Energie verbraucht und im aktiven Zustand die doppelte Wärme erzeugt. Obwohl es nicht benötigt wird, wäre es völlig nutzlos. Man könnte also argumentieren, dass es keine gute Nutzung von Ressourcen ist, die auf modernen Prozessoren selten sind.

Woher wissen Sie, welche Version Sie schreiben müssen, es sei denn, Sie bevorzugen einen Zweig, der auf der Wahrscheinlichkeit basiert? Wenn keine, können Sie möglicherweise nichts speichern, da andere Prozessoren möglicherweise ohnehin auf Ihre Entscheidung warten müssen. Wenn Sie sich an einen von ihnen halten, haben Sie im Wesentlichen die gleiche Rollback-Wahrscheinlichkeit und die gleichen Kosten wie jetzt.

Lassen Sie uns eine grobe Berechnung durchführen. Nehmen wir der Einfachheit halber an, dass die Handhabung von zwei Pipelines anstelle von einer keinen zusätzlichen Verwaltungsaufwand verursacht. Die erwarteten Kosten (z. B. Energie, Wärme) sind C.=c+p(cr+c) mit einer Pipeline ( die Kosten für die Ausführung einer der beiden Alternativen, p die Wahrscheinlichkeit für den Rollback und c r die Kosten für den Rollback ohne die Kosten für die Ausführung die andere Alternative) aber entweder 2 c oder sogar 2 c + p c r - entweder ist vielcpcr2c2c+pcrgrößer als wenn p und c r relativ klein sind, und p ist es sicherlich (soweit ich weiß, haben moderne Verzweigungsvorhersagen Genauigkeiten über 90%). Und wir bekommen nicht viel für diese Kosten! Erwartete Ausführungszeiten sind t + p ( t r + t ) mit einer Pipeline und t resp. t + p t r mit zwei; Da p klein ist, ist die Zeitersparnis vernachlässigbar.C.pcrpt+p(tr+t)tt+ptrp


Soweit ich weiß, hat Intel versucht, "Anweisungen für beide Seiten des Zweigs zu lesen" und sogar "Anweisungen für beide Seiten des Zweigs auszuführen", und dies eingestellt. Entweder weil es nichts gewonnen hat oder weil die Kosten und die Komplexität so hoch waren, dass sie auf unterschiedliche Weise mehr Gewinne bei gleichen Kosten erzielen konnten.
Gnasher729

@ gnasher729 Und das war wahrscheinlich, bevor wir von Sicherheitslücken erfuhren, die mit solchen Funktionen verbunden sind?
Raphael

2

In gewisser Hinsicht ist der Effekt der Verzweigungsvorhersage beim Abrufen von Befehlen kritischer, da ein Befehl, der nicht abgerufen wird, nicht ausgeführt werden kann.

In Bezug auf die Ausführung beider Pfade eines Zweigs wird dies als eifrige Ausführung bezeichnet und wurde etwas eingehender untersucht. Augustus K. Uht und Vijay Sindagis "Disjunkte eifrige Hinrichtung: Eine optimale Form der spekulativen Hinrichtung" (1995) könnten einen Blick wert sein.

Eifrige Ausführung hat mehrere Probleme. Für tiefe Spekulationen kann die Anzahl der Pfade, die verfolgt werden müssen, exponentiell ansteigen (jeder gegabelte Verzweigungspfad kann auf eine Verzweigung treffen). Die Verzweigungsvorhersage ist oft auch sehr genau (> 90% korrekt), daher wäre es verschwenderisch, immer beide Pfade auszuführen. Eifrige Ausführung kann auch Caches mit nutzlosem Inhalt "kontaminieren". (Das oben erwähnte Papier schlug eine intelligent begrenzte eifrige Ausführung vor, um einige dieser Probleme zu vermeiden.) Das begrenzte eifrige Abrufen des alternativen Pfads weist weniger Probleme auf und kann bei der Verringerung der Verzögerung bei der Wiederherstellung von Fehlvorhersagen in kürzeren Pipelines etwas attraktiv sein.

Ein anderer Ansatz, der vorgeschlagen wurde, ist das dynamische Prädizieren von "Hängematten" -Zweigen (kurze Vorwärtszweige, die sich wieder mit dem Hauptpfad des Befehlsflusses verbinden). Artur Klauser et al. "Dynamic Hammock Predication for Non-Predicated Instruction Set Architectures" (1998) könnten für diese Idee eine Lektüre wert sein. (Hyesoon Kim et al. "Wish Branches: Kombination von bedingter Verzweigung und Prädikation für adaptive prädizierte Ausführung" schlägt vor, ISA-Zweige hinzuzufügen, die die Prädikation von Hängematten erleichtern, und erweitert diese Prädikationsmethode auf schwer vorhersagbare Schleifenzweige.)


Das ist eine wirklich schöne Antwort! Danke. :-)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.