Grundlegendes zum Verzweigungsverzögerungsschlitz und zum Vorabrufen der Verzweigungsvorhersage beim Anweisungs-Pipelining

Lassen Sie mich definieren:

  • Verzweigungsverzögerungsschlitz: In der Regel ordnen Assembler Anweisungen neu an, um einige Anweisungen unmittelbar nach der Verzweigungsanweisung zu verschieben, sodass die verschobene Anweisung immer ausgeführt wird, unabhängig davon, ob eine Verzweigung vorliegt wird genommen oder nicht, ohne das System in einem inkonsistenten Zustand zu belassen.

  • Vorabruf der Verzweigungsvorhersage: Vorhersagen, was das Ergebnis einer Verzweigungsbedingung sein wird, und anschließendes Abrufen von Anweisungen von der resultierenden Position, so dass sie sofort nach der Verzweigungsanweisung ausgeführt werden.

Jetzt Betrachten wir die folgende Ausführungssequenz (unten F: Befehlsabruf, D: Befehl Decode, X: eXecute, M: Speicherzugriff, W: Zurückschreiben):

BRANCH F D X M W INSTR1 F D X M W INSTR2 F D X M W INSTR3 F D X M W 

Normalerweise wird die Verzweigungsbedingung ausgewertet und ausgeführt in der X-Stufe. Zu diesem Zeitpunkt sind INSTR1 und INSTR2 bereits gestartet. Dies sind die Anweisungen, die durch die Auswahl der Verzweigungsverzögerung beeinflusst werden können Slot oder Branch Prefetch oder beides. Ich habe keinen Text gefunden, um dies klar zu diskutieren. Also habe ich versucht, es wie folgt zu erraten:

  • Wenn wir beide verwenden, lautet die Befehlssequenz:

    BRANCH: branch-instruction INSTR1: branch-delay-slot INSTR2: branch-prediction-prefetch 
  • Wenn wir nur die Verzweigungsvorhersage verwenden, lautet die Befehlssequenz:

    BRANCH: branch-instruction INSTR1: branch-prediction-prefetch-1 INSTR2: branch-prediction-prefetch-2 
  • Wenn wir nur Verzweigungsverzögerungsschlitze verwenden, lautet die Befehlssequenz:

    BRANCH: branch-instruction INSTR1: branch-delay-slot-1 INSTR2: branch-delay-slot-2 

Stimmt das? Geschieht dies tatsächlich für verschiedene Fälle? Oder gibt es noch mehr Details?

Kommentare

  • Ich ' habe die " Wenn wir nur die " -Sequenz verwenden: Wie kann es Brach-Delay-Slots geben? Das Anzeigen des Assembler-Teils, das Sie in Ihrem Header zu haben scheinen, wäre auch eine Klarstellung.
  • (1) " Ich habe ' t grok die " Wenn wir nur die Verzweigungssequenz " verwenden: Wie kann es Brach-Delay-Slots geben? " – Der Satz wurde korrigiert, ich habe ihn versehentlich unvollständig gelassen. Hoffe es macht jetzt Sinn. (2) Ich habe Folgendes nicht erhalten: " Außerdem würde es klarstellen, wenn Sie den Assembler in Ihrem Header anzeigen. " Tun Sie wollen damit sagen, ich sollte den Assembler angeben, mit dem ich arbeite? Wenn ja: Ich lese ein Pipelining-Kapitel aus dem Buch " Computerorganisation und -design " von Patterson. Also mit reiner Theorie umgehen und Übungsprobleme lösen.

Antwort

Ja, das könnte passieren, Obwohl ich mich an keine Architektur erinnere, die Vorhersage- und Verzögerungssteckplätze kombiniert: Wenn Sie eine Vorhersage haben, kann diese parallel zum Ausführungsschritt ausgeführt werden (Suche in einem kleinen Speicher), sodass keine Verzögerungssteckplätze erforderlich sind.

Kommentare

  • dank bestätigen, da solche Szenarien in den Übungsproblemen des Computerarchitekturbuchs von Patterson behandelt werden. Es gibt direkte Lösungen ohne Erklärung. Weder das Kapitel Inhalte diskutieren dies.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.