Wird die Pipeline immer genau dann angehalten, wenn der nächste Befehl, der in die Pipeline gelangen würde zu einen Konflikt führen würde? Wenn man z.B. folgendes Programm, mit der üblichen Abacus Pipeline ohne Forwarding betrachtet:
mov $2, 10
mov $0, 1
L: mov $1, 1
add $0, $0, $0
subi $2, $2, 1
bnz $2, L
Dann würden nach der beschrieben Logik die Konflikte wie folgt gelöst werden:
mov $2, 10
mov $0, 1
L: mov $1, 1
nop
add $0, $0, $0
subi $2, $2, 1
nop
nop
nop
bnz $2, L
Aber folgende Lösung
mov $2, 10
mov $0, 1
nop
L: mov $1, 1
add $0, $0, $0
subi $2, $2, 1
nop
nop
nop
bnz $2, L
wäre ja effizienter, da insgesamt weniger Stalls benötigt werden. Welche der beiden Lösungen ist korrekt?
Vielen Dank für alle Beträge!