[Advcomparch] Μερικές ερωτήσεις για τη L.D

Nikos Anastopoulos anastop at cslab.ece.ntua.gr
Wed Jun 24 00:45:14 EEST 2009


Μιχάλης Βήχος wrote:
> Έστω οι ακόλουθες εκτελέσεις εντολών (από την άσκηση).
>
> DADDI R1,R1,#16
> BNEZ R1,foo ;Η διακλάδωση έχει προβλεφθεί TAKEN
> L.D F2,0(R1)
>
> Αν δεν κάνω λάθος, τη στιγμή που η DADDI είναι σε στάδιο WB γίνεται 
> ISSUE η L.D. Η τελική τιμή της R1 δεν είναι ακόμα γνωστή. Προφανώς η 
> L.D θα πρέπει να περιμένει για 1 κύκλο. Λέω κάτι λάθος?
Σωστά. Αν τη στιγμή που γίνει issue η L.D, συμβουλευτεί το reg. res. 
status και δει ότι για τον R1 υπάρχει κάποιος rs που θα τον παράξει, 
τότε, όπως αναφέρει και ο ψευδοκώδικας του Tomasulo, θα πρέπει να 
περιμένει μέχρι να λάβει τον R1 στον επόμενο κύκλο ("Load-store step1: 
wait until RS[r].Qj = 0 ... , όπου Qj το rs που θα δώσει στην περίπτωσή 
μας τον R1)
> Τι θα πρέπει να μπει στο πεδίο ADDRESS του RS Load(x)? Θα πρέπει να το 
> αφήσω κενό και
> να το συμπληρώσω στον επόμενο κύκλο όπου η R1 θα έχει υπολογιστεί? Θα 
> μπορούσα να βάλω κάτι τις μορφής Μ[0+Int1] (Int1 είναι ο RS που έχει 
> δεσμέυση η DADDI)?
Θα μπορούσες να βάλεις κάτι σαν το M[0+Int1] ή να το αφήσεις απλά κενό 
όπως λες (με το σκεπτικό ότι η πληροφορία για τον Int1 θα υπάρχει ήδη 
μέχρι εκείνη στιγμή στο αντίστοιχο πεδίο Qj του load buffer).


>
> Και κάτι ακόμα...
>
> Οι RS των εντολών MUL.D, DADDI κτλ. έχουν τα πεδία Qj και Qk που 
> κρατούν τα ονόματα των RS από τα οποία περιμένω αποτέλεσμα. Αν αυτά τα 
> πεδία είναι κενά έχω έτοιμα τα δεδομένα και επομένως μπορώ να συνεχίσω 
> την εκτέλεση. Υπάρχει κάποιο ανάλογο πεδίο για τους RS των εντολών 
> L.D? Χωρίς ένα ανάλογο πεδίο πως θα ξέρω ποιον RS θα περιμένω να 
> ελευθερωθεί για να συνεχίσω την εκτέλεση μίας L.D?
Ναι, σαφώς υπάρχει, και είναι το Qj που ανέφερα προηγουμένως. Η αλήθεια 
είναι ότι αυτό γενικά δεν επισημαίνεται έντονα στο βιβλίο (παρά μόνο 
στον ψευδοκώδικα και σε κανά-δυο παραδείγματα όπου απεικονίζονται οι 
load buffers), με το σκεπτικό ότι δίνεται περισσότερη έμφαση στο 
floating-point μέρος του pipeline και αγνοούνται οι πράξεις με integers. 
Αλλά προφανώς είναι κάτι που επιβάλλεται να υπάρχει για να διασφαλίσει 
τη σωστή λειτουργία όλων των εντολών.



Ν.





More information about the Advcomparch mailing list