Load / Store Architektur und Lokalhalten von Daten
Da Speicherzugriffe in Pipelines starke Konflikte hervorrufen, gibt es bei
RISC-Befehlssätzen nur eine einzige Möglichkeit mit LOAD bzw. STORE auf den
Speicher zuzugreifen. So werden Registerzugriffe von Speicherzugriffen getrennt. Da
Speicherzugriffe bekanntermaßen immer sehr viel Zeit kosten, versucht man diese so
weit wie möglich zu vermeiden. Dies Erreicht man durch Lokalhalten von Daten, bzw.
das Arbeiten auf den Registern.
Was sind Registerfenster?
Registerfenster sollen das Lokalhalten von Daten unterstützen. Typische RISC
Prozessoren wie die Berkeley RISC besitzen weit über 100 Register, von denen aber
immer nur 32 für sichtbar sind:
- R0...R9 globale Register
- R10...R15 Ausgaberegister
- R16...R25 lokale Register
- R26...R31 Eingaberegister
Die Idee ist nun, daß die ersten 10 Register von allen Prozeduren gesehen
werden. Die Restlichen von R10 bis R31 sind jeweils nur einer Prozedur zugeordnet.
Falls nun eine Prozedur eine andere aufruft, wird nur das "Fenster" auf einen
freien Registerbereich umgeschaltet. So müssen die Register nicht neu aus dem
Speicher geladen werden und es wird dadurch viel Zeit gespart. Normalerweise
überlappen sich die einzelnen Fenster um einige Register, um somit gleich eine
effiziente Möglichkeit der Parameterweitergabe zu bieten.
Was passiert wenn alle Registerfenster voll sind?
Bei unserem Beispiel mit 138 Registern sind nach sieben Prozeduraufrufen alle
Register gefüllt. Um ein Überlaufen zu vermeiden, wird das Register als
Ringregister organisiert. Sind alle Registerfenster voll, wird das Älteste in den
Speicher ausgelagert, was von sogenannten Trap-Routinen erledigt wird.
Was sind Superpipelines?
Superpipes vereinen Arithmetisches und Befehlspipelining. Arithmetisches
Pipelining ist sogenanntes Funktionspipelining, bei dem einzelne Phasen eines
Befehles in einer Pipeline-Form organisiert werden.
Bei Instruction Pipelining wird die Abarbeitung eines gesamten Befehls in einer
Pipeline organisiert.