MIPS64 Simulator Pipeline


Der MIPS64 Simulator hat eine fünfstufige Pipeline. Die Pipeline ist Hardware überwacht und die Bypasses können abgeschaltet werden. Das Sprungziel steht schon in der ID-Phase bereit.

Bei der Abarbeitung des MIPS Programms für Aufgabe 7 und in einer durch umsortieren der Befehle optimierten Variante entstanden dann die folgenden 4 Bilder.

MIPS64 mit Aufg7_neu.s ohne Bypass

Aufgabe 7 mit nicht optimierter Befehlsfolge ohne Bypass. Das Programm hat bis zum SYSCALL 0 165 Befehle auszufüren und benötigt dazu 292 Takte. Das sind 1,769 CPI.


MIPS64 mit Aufg7_neu.s ohne Bypass

Aufgabe 7 mit nicht optimierter Befehlsfolge mit Bypass. Das Programm hat bis zum SYSCALL 0 165 Befehle auszufüren und benötigt dazu 210 Takte. Das sind 1,272 CPI.


MIPS64 mit Aufg7_neu.s mit Bypass

Aufgabe 7 mit optimierter Befehlsfolge ohne Bypass. Das Programm hat bis zum SYSCALL 0 165 Befehle auszufüren und benötigt dazu 230 Takte. Das sind 1,393 CPI.


MIPS64 mit Aufg7_neu.s mit Bypass

Aufgabe 7 mit optimierter Befehlsfolge mit Bypass. Das Programm hat bis zum SYSCALL 0 165 Befehle auszufüren und benötigt dazu 190 Takte. Das sind 1,151 CPI.


Der MIPS Prozessor selbst arbeitet mit einer nicht überwachten Pipeline. Der Assembler oder Compiler muss dann alle Konflikte erkennen und durch Einfügen von NOP (z.B.: add r0,r0,r0) beseitigen. In weiteren Optimierungsschritten können dann durch Umsortierungen die NOP meist entfernt werden. Bei einer solchen Pipeline wird der Befehl hinter einem Sprungbefehl nicht abgebrochen, sondern wird immer vollständig ausgeführt. Man bezeichnet das als "Delayed Branch" oder "Delayed Jump". Der Befehl hinter einem Sprungbefehl wirkt dann so als würde er noch vor dem Sprungbefehl stehen.

Sortiert man in dem Programm zur Aufgabe 7 den ADDI R3,R3,4 Befehl noch hinter den BNE R2,R0,loop Befehl, dann würde das Programm ohne jeglichen Konflikt abgearbeitet. Es würde bei 165 Befehlen diese genau in 165 Takten abarbeiten. Das sind 1,000 CPI.

Fur eine solche Umsortierung in einer Programmschleife kommen nur Befehle in Frage, die zwischen der Eisprungsmarke (hier loop) und dem Sprungbefehl stehen und keinen Einfluss auf die Sprungbedingung haben. Bei dem Befehl ADDI R3,R3,4 ist dies der Fall.



20.01.2012 Siegmar Schöne