Frage

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

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

  2. In der Befehlspipeline, wo das Abrufen problematischer ist, da die Befehle erst später tatsächlich ausgeführt werden.

Was davon ist sehr wichtig (was davon ist heutzutage in der CPU wirklich wichtig)?Wenn beide gleich wichtig sind oder die zweite wichtiger ist, warum haben wir dann nicht zwei Befehlspipelines (wahrscheinlich mit halber Länge) und wählen dann abhängig von den Zweigen einfach einen davon aus und beginnen dann erneut mit der Population? Anfang?

War es hilfreich?

Lösung

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

Zunächst bräuchte man einen doppelten Draht, der im aktiven Zustand doppelt so viel Energie verbraucht und doppelt so viel Wärme erzeugt.Obwohl es nicht benötigt wird, wäre es andererseits völlig nutzlos.Man könnte also argumentieren, dass es sich nicht um eine sinnvolle Nutzung von Ressourcen handelt, die bei modernen Prozessoren selten sind.

Grundsätzlicher: Woher wissen Sie, welche Version Sie schreiben müssen, es sei denn, Sie bevorzugen einen Zweig basierend auf der Wahrscheinlichkeit?Wenn dies nicht der Fall ist, speichern Sie möglicherweise nichts, da andere Prozessoren möglicherweise sowieso auf Ihre Entscheidung warten müssen.Wenn Sie bei einer davon bleiben, 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 statt einer Pipeline keinen zusätzlichen Verwaltungsaufwand verursacht.Die erwarteten Kosten (z.B.Energie, Wärme) ist $C = c + p(c_r + c)$ mit einer Pipeline ($c$ die Kosten für die Ausführung einer der beiden Alternativen, $p$ die Wahrscheinlichkeit für Rollback und $c_r$ die Kosten für Rollback ohne die Kosten für die andere Alternative ausführen), aber entweder $2c$ oder sogar $2c + pc_r$ – beides ist der Fall eine Menge größer als $C$, wenn $p$ und $c_r$ relativ klein sind, und $p$ ist es auf jeden Fall (soweit ich weiß, haben moderne Zweigvorhersagen Genauigkeiten von über 90 %).Und für diesen Preis bekommen wir nicht viel!Erwartete Ausführungszeiten sind $t + p(t_r + t)$ mit einer Pipeline bzw. $t$.$t + pt_r$ mit zwei;Da $p$ klein ist, ist die Zeitersparnis vernachlässigbar.

Andere Tipps

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.

Im Hinblick auf die Ausführung beider Pfade einer Verzweigung wird dies als Eager Execution bezeichnet und wurde einigermaßen ausführlich erforscht.Augustus K.Uht und Vijay Sindagis „Disjoint Eager Execution“:„An Optimal Form of Speculative Execution“ (1995) könnte einen Blick wert sein.

Eine eifrige Ausführung bringt mehrere Probleme mit sich.Um tiefer zu spekulieren, kann die Anzahl der Pfade, die verfolgt werden müssen, exponentiell ansteigen (jeder verzweigte Zweigpfad kann auf einen Zweig treffen).Auch die Verzweigungsvorhersage ist oft sehr genau (>90 % korrekt), sodass es verschwenderisch wäre, immer beide Pfade auszuführen.Eine eifrige Ausführung kann Caches auch mit nutzlosem Inhalt „kontaminieren“.(Das oben erwähnte Papier wurde vorgeschlagen intelligent begrenzt Eager-Ausführung, um einige dieser Probleme zu vermeiden.) Das begrenzte Eager-Fetching des alternativen Pfads weist weniger Probleme auf und kann einigermaßen attraktiv sein, wenn es darum geht, Verzögerungen bei der Wiederherstellung nach Fehlvorhersagen in kürzeren Pipelines zu reduzieren.

Ein weiterer vorgeschlagener Ansatz ist die dynamische Vorhersage von „Hängematten“-Zweigen (kurze Vorwärtszweige, die wieder mit dem Hauptpfad des Befehlsflusses verbunden sind).Artur Klauser et al.s „Dynamic Hammock Predication for Non-predicated Instruction Set Architectures“ (1998) könnte für diese Idee eine Lektüre wert sein.(Hyesoon Kim et al.s „Wish Branches:„Combining Conditional Branching and Predication for Adaptive Predicated Execution“ schlägt vor, einer ISA Zweige hinzuzufügen, die die Vorhersage von Hängematten erleichtern, und erweitert diese Methode der Vorhersage auf schwer vorhersehbare Schleifenzweige.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top