Information Technology Reference
In-Depth Information
Falls das Programmiermodell eines streng sequentiell arbeitenden Prozessors
zugrunde gelegt wird, müssen bei einem Kontrollflusskonflikt die bis zum Zeitpunkt
der Ausführung des verzweigenden Sprungbefehls in das Fließband geladenen
Befehle annulliert werden, z.B. indem man die in den entsprechenden Fließbandstu-
fen befindlichen Befehle durch nops ersetzt. In Bild 2.24b geschieht dies z.B. mit
der auf den Sprungbefehl folgenden Addition und Subtraktion, die beide zum Zeit-
punkt t 3 annulliert werden, sobald nämlich feststeht, dass der Sprungbefehl ver-
zweigt. Dadurch wird die Ausführungszeit eines verzweigenden Sprungbefehls
effektiv um die Anzahl der Takte verlängert, die zum Laden der annullierten Befehle
erforderlich war. Diese Zeitstrafe tritt nur auf, wenn der Sprungbefehl verzweigt. Im
anderen Fall können nämlich die auf den Sprungbefehl im Fließband nachfolgenden
Befehle ganz regulär und verzögerungsfrei beendet werden.
Bedingte Befehlsausführung (predication)
Kontrollflusskonflikte sind in kurzen Befehlsfolgen vermeidbar, wenn auf die Ver-
wendung von Sprungbefehlen verzichtet wird. Statt ein Unterprogramm durch einen
Sprungbefehl aufzurufen, kann es nämlich auch direkt vom Übersetzer in das aufru-
fende Programm eingebettet werden. Mit bedingten Sprungbefehlen ist dies hinge-
gen selten möglich, da Sprungentscheidungen i.Allg. von zur Laufzeit durchgeführ-
ten Berechnungen abhängig sind. In einigen Fällen lassen sich bedingte Sprungbe-
fehle jedoch dadurch vermeiden, dass die Erzeugung von Ergebnissen beliebiger
Befehle bedingt erfolgt. In seiner Wirkung ist dies mit einem Sprungbefehl ver-
gleichbar, der den unmittelbar folgenden z.B. Verknüpfungsbefehl überspringt, falls
die jeweilige Bedingung nicht erfüllt ist, allerdings mit dem Unterschied, dass der
bedingte Sprungbefehl 1 einen Kontrollflusskonflikt verursachen kann, ein bedingt
ausgeführter Befehl jedoch nicht.
Ein Nachteil der bedingten Befehlsausführung ist, dass die Bedingung, unter der ein
Ergebnis erzeugt werden soll, im jeweiligen Befehl angegeben sein muss, und zwar
auch dann, wenn man den Befehl im Normalfall unbedingt ausführt. So enthalten
die meisten Befehle des ARM7TDMI von ARM [10] z.B. einen vier Bit breiten
Bedingungscode, in dem bei unbedingt ausgeführten Befehlen der Wert „always“
codiert ist. Dieser Nachteil lässt sich zum Teil dadurch vermeiden, dass nicht der
gesamte, sondern nur ein kleiner Teil des Befehlssatzes bedingt ausführbar realisiert
wird, im Grenzfall gewöhnlich nur ein Move -Befehl (wie z.B. beim Pentium 4 von
Intel [81, 77]).
Eine Variante, bei der alle Befehle des Befehlssatzes bedingt bearbeitet werden kön-
nen, ohne das der Bedingungscode in allen Befehlen codiert sein muss, wurde in der
an der TU Berlin entwickelten Nemesis-Architektur realisiert [114]. Sie verfügt
über 16 Bit breite Befehle die sich durch Präfixe erweitern lassen. Wird ein Sprung-
befehl decodiert, der einen Offset von Eins enthält und daher bei erfüllter Bedin-
1. Ein bedingter Sprungbefehl kann auch als ein bedingt ausgeführter unbedingter Sprungbefehl
angesehen werden.
Search WWH ::




Custom Search