[Advcomparch] lea stalls
Nikos Anastopoulos
anastop at cslab.ece.ntua.gr
Tue Jun 23 20:54:15 EEST 2009
Geoffrey Tolwyn wrote:
> Έχω μια ερώτηση σχετικά με το effective address calculation. Έστω ο
> παρακάτω κώδικας (της άσκησης)
>
> S.D F10 8 R1
> DADDI R1 R1 #16
>
> Η store θα κάνει το effective address calculation (memory[R1+8]) κατά
> το EX στάδιό της σύμφωνα με την εκφώνηση. Έστω τώρα ότι η store
> περιμένει όρισμα (F10), οπότε δεν μπορεί να αρχίσει να εκτελείται.
> Επίσης, έστω ότι δεν υπάρχει εξάρτηση στον R1.
>
> Η add δεν μπορεί να αρχίσει να εκτελείται, γιατί αν τελειώσει (WB)
> πριν τη store, η store θα αποτύχει στο σωστό calculation του effective
> address (R1+8).
> Σωστά ως εδώ;
Η store, τη στιγμή που γίνεται issue, διαβάζει τη σωστή τιμή του R1 (με
την υπόθεση ότι είναι διαθέσιμος - αν δεν είναι διαθέσιμος, καταγράφει
τον rs που θα τον παράξει). Οπότε, ακόμα και αν δεν αρχίσει να
εκτελείται επειδή περιμένει τον F10, θα έχει διαβάσει σωστά όλη την
απαραίτητη πληροφορία για την αποθήκευσή του αργότερα στη μνήμη. Διότι
δε θα διαβάσει τον R1 από το register file (όπου όντως θα υπήρχε
κίνδυνος για αλλαγή στη σημασιολογία), αλλά από το πεδίο V που θα τον
έχει αποθηκεύσει κατά το issue (αν ήταν διαθέσιμος), ή μέσω του cdb από
την εντολή η οποία θα τον παράξει. Πρόκειται δηλαδή στην ουσία για
register renaming πάνω στον R1, το οποίο επιλύει το WAR hazard που
υφίσταται ανάμεσα στις 2 εντολές.
Ν.
More information about the Advcomparch
mailing list