Ich lese ein Buch über Computer-Architektur und ich bin in diesem Kapitel über Branch Prediction sprechen. Es gibt diese kleine Übung, die ich schwer habe, meinen Kopf darum zu wickeln.Branch Vorhersage und Leistung
sich das folgende inneren for-Schleife
for (j = 0; j < 2; j++)
{
for (i = 10; i > 0; i = i-1)
x[i] = x[i] + s
}
-------> inneren Schleife:
L.D F0, 0(R1)
ADD.D F4, F0, F2
S.D F4, 0(R1)
DADDUI R1, R1, -8
BNE R1, R3, Loop
Angenommen Register F2 die skalare s hält, R1 hält die Adresse von x [ 10], und R3 wird vorberechnet, um die Schleife zu beenden, wenn i == 0;
a) Wie würde ein Prädiktor, der zwischen genommener/nicht genommener Leistung wechselt?
---- Da die Schleife nur 2 mal ausgeführt wird, denke ich, dass die alternative Vorhersage die Leistung in diesem Fall (?) Mit 1 Fehlvorhersage beeinträchtigen würde.
b) Würde ein 1-Bit-Verzweigungsvorhersagepuffer die Leistung verbessern (im Vergleich zu a)? Angenommen, die erste Vorhersage wird "nicht getroffen", und keine anderen Zweige werden diesem Eintrag zugeordnet.
---- Vorausgesetzt, die erste Vorhersage ist "nicht genommen", und 1-Bit-Prädiktor invertieren das Bit, wenn die Vorhersage falsch ist. Also wird es NT/T/T sein. Hat dies die gleiche Leistung wie das Problem a)? mit 1 Fehlvorhersage.
c) Würde ein 2-Bit-Verzweigungsvorhersagepuffer die Leistung verbessern (im Vergleich zu a)? Angenommen, die erste Vorhersage wird "nicht getroffen", und keine anderen Zweige werden diesem Eintrag zugeordnet.
---- 2-Bit-Verzweigungsvorhersage beginnend mit "nicht genommen". Wie ich mich erinnere 2-Bit-Vorhersage ändern, nachdem es zweimal fehlt. Also wird diese Vorhersage wie NT/NT/T/T gehen. Daher wird seine Leistung im Vergleich zu a) schlechter sein. 1 Fehlvorhersage
Das war mein Versuch, die Probleme zu lösen. Kann mir bitte jemand erklären, ob meine Antwort richtig/falsch ist? Vielen Dank.
Oh, ich hatte dieses innere Loop-Verständnis falsch. Ich sehe jetzt. Ist mein Verständnis der 1-Bit-Verzweigungsvorhersage und der 2-Bit-Vorhersage für B) und C) korrekt? (Ignorieren der falschen Schleife) –
Und für Frage a).Angenommen, es beginnt als NT, aber diese Verzweigung soll genommen werden, geht das System zurück und hat diese Schleife danach genommen? Bedeutet es, dass es doppelt so lange dauern würde, um den inneren Schleifenzweig zu betreiben? –
@NguyenTran: Die CPU "erscheint" immer, um Anweisungen in der richtigen Programmreihenfolge auszuführen. Sobald ein falsches Ergebnis festgestellt wird, werden alle falsch-spekulativen Arbeiten verworfen, und es beginnt mit der Ausführung von der richtigen Seite der Verzweigung. Ein Fehleinschätzer kostet normalerweise viel mehr Zyklen als ein korrekt vorhergesagter Zweig. (z. B. 15 Zyklen gegenüber 1 Zyklus für eine lange Pipeline). –