2016-05-18 9 views
0

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.

Antwort

0

Da die Schleife nur bedeuten, ausgeführt 2 mal

Sie die Außenkreis- bedingt, die, die Sie nicht für asm zeigte? Ich beantworte nur einen Teil der Frage, für den Fall, dass diese Verwirrung Ihr Hauptproblem war. Hinterlasse einen Kommentar, wenn du nicht verwirrt warst.


die bedingte Verzweigung am unteren Ende der inneren Schleife wird 20 mal ausgeführt, mit diesem Rüttler: 9XT, 1xNT, 9XT, 1xNT. Ein alternierender Prädiktor würde ungefähr 50% der Zeit falsch sein, +/- 20%, je nachdem, ob er richtig oder falsch begonnen hat.

Es ist die äußere Schleife, die nur zweimal läuft: T, NT. Die gesamte innere Schleife läuft zweimal.

Der äußere Schleifenzweig würde entweder perfekt oder schrecklich vorhergesagt werden, abhängig davon, ob die alternierende Vorhersage mit T oder mit NT begann.

+0

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) –

+0

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? –

+0

@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). –