0 Daumen
148 Aufrufe

Wir haben eine einfachen 5-stufigen Pipeline bestehend aus: Befehl holen
(IF), Befehl dekodieren (ID), Operanden holen (OF), Ausführung (EX), Rückspeichern (WB).

Weiterhin liegt eine reine Load/Store-Architektur ohne architekturelle Beschleunigungsmaßnahmen (z. B. Forwarding, Reordering etc.) oder Hardware zur Erkennung von Hemmnissen vor.

Operanden können erst dann aus Registern geholt werden, nachdem sie zurück gespeichert wurden.

Frage:

Wie wird nun die folgende Befehlsfolge aus Pseudoinstructions in der oben beschriebenen Pipeline konfliktfrei ausgeführt?

add r0, r1, r2
sub r1, r5, r0
mov [rsp+8], r5
or r0, r5, r4
mov r3, [rsp+24]
and r1, r0, r3
add r0, r1, r3
add r0, r0, 0x341D
add r0, r0, 0x52F6

Vielen Dank!

Avatar von

1 Antwort

0 Daumen

In einer reine Load/Store-Architektur ohne architekturelle Beschleunigungsmaßnahmen und ohne Hardware zur Erkennung von Hemmnissen wird jeder Befehl in der oben beschriebenen Pipeline in der folgenden Reihenfolge ausgeführt:

Befehl holen (IF): Der nächste Befehl wird aus dem Speicher gelesen und in den IF-Teil der Pipeline geladen.

Befehl dekodieren (ID): Der Befehl wird dekodiert und die Operanden werden identifiziert.

Operanden holen (OF): Die Operanden werden aus den Registern gelesen, sofern sie bereits zurückgespeichert wurden.

Ausführung (EX): Der Befehl wird ausgeführt und das Ergebnis wird in einem Register oder im Speicher gespeichert.

Rückspeichern (WB): Das Ergebnis wird in den Registern oder im Speicher zurückgespeichert.

Da die Pipeline in diesem Fall keine architekturelle Beschleunigungsmaßnahmen hat, werden die Befehle sequentiell und in der Reihenfolge, in der sie im Programm vorkommen, ausgeführt. Daher wird jeder Befehl erst ausgeführt, nachdem der vorherige Befehl vollständig ausgeführt wurde.

In diesem Fall kann die Befehlsfolge konfliktfrei ausgeführt werden, da die Register, die in jedem Befehl verwendet werden, erst im Write-Back-Teil (WB) des vorherigen Befehls zurückgespeichert werden, bevor sie im Operand-Fetch-Teil (OF) des nächsten Befehls gelesen werden.

Es ist wichtig darauf hinzuweisen, dass in diesem Fall die Ausführungszeit der Programm für die ungünstigste Fall länger sein kann, da es keine Möglichkeit gibt, Befehle parallel auszuführen oder Hemmnisse zu erkennen und zu umgehen.




Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community