Zweifel an der Pipelining-Weiterleitung in MIPS

Ich bin ziemlich neu in der Computerarchitektur und habe Schwierigkeiten, Probleme zu lösen, die auf Pipelining basieren. Ich habe versucht, ein Problem aus diesem PDF zu lösen, das ich bei Google gefunden habe

Ich habe einen Zweifel an einem Teil bdes Problems 2, bei dem wir gefragt werden. Ich habe zwei Fragen: Warum ist eine Pause zwischen und Anweisung How many cycles will it take to execute on the fully bypassed MIPS processor?erforderlich, und zweitens, wie wird die endgültige Antwort überhaupt berechnet? Ich verstehe den Teil überhaupt nicht . Auch wenn ich den Stillstand zwischen und annehme , dann beginnt die nächste Iteration der Schleife bei den Zyklen 9,18 .. und so weiter. Dies sollte 64 Mal passieren und der erste Zyklus von der Anweisung und die 3 verbleibenden Zyklen für die letzte Ausführung von bedeutet, dass die Gesamtzyklen = 1 + 64 * 9 + 3 = 580 sind, richtig? Ich habe 9 Zyklen, wie im Zeitdiagramm gezeigt, bei der 9. Zyklus-ID vonlwsw1 + 63 · (6 + 3) + 1 · (6 + 2) = 576lwswlibnezbnezes geht voran. Für die letzte Iteration führen wir die Verzweigung nicht aus, aber wir benötigen 3 weitere Zyklen, um die bnezAnweisung abzuschließen.

BEARBEITEN: Nach dem Auschecken der Lösung für den nächsten Teil desselben Problems scheint es, dass die Anzahl der Zyklen aus irgendeinem Grund tatsächlich angenähert wird. Ich dachte, das sollte nur für eine große Anzahl von Anweisungen (Millionen oder mehr) gemacht werden. Bin mir aber nicht sicher ob ich richtig liege :(

Antworten (1)

Der Grund für die Verwendung von 63 statt 64 in der Berechnung ist einfach. Befehle, die danach abgerufen wurden, bnezmüssen jedes Mal geleert werden, mit Ausnahme der letzten Iteration.

Für die letzte Iteration muss diese Anweisung nicht geleert werden und spart einen Verzögerungszyklus (wie im verlinkten PDF erwähnt), sodass wir die Verzögerungsberechnung als (6 + 2) anstelle von (6 + 3) für haben die letzte Iteration.


Berechnungen:

Es gibt 6 Anweisungen in der Schleife. Die Zyklen pro Anweisung (CPI) des Pipeline-Prozessors ist 1. Es gibt 2 Verzögerungen und 1 Zyklus ist erforderlich, um die Anweisung nach bnez.

Gesamtzykluszahl = (Anzahl der Befehle x CPI) + Anzahl der Unterbrechungen + Anzahl der Zyklen, die zum Leeren des Befehls danach erforderlich sindbnez

= (6x1) + 2 + 1

Für die letzte Iteration ist das Spülen nicht erforderlich. Es wird also 6+2.


Einige kostenlose Online-Kurse, um mehr über dieses Thema zu erfahren:

  1. https://learn.saylor.org/course/view.php?id=71
  2. https://www.coursera.org/learn/comparch/