Καλησπέρα,
Θα ήθελα να ρωτήσω τι προβλέπει ο αλγόριθμος tomasulo στην ακόλουθη περίπτωση. Θα χρησιμοποιήσω σαν παράδειγμα την περσινή άσκηση, όπως αυτή λύνεται στο site:
Η εντολή DIV.D της γραμμής 3 μαρκάρει τον καταχωρητή F2. Έπειτα η SUB.D της γραμμής 10 σημειώνει πως πρέπει να περιμένει να απομακρυνθεί η σημαία Mul1 πριν δεσμεύσει τον πόρο της F2. Οι δύο αυτές εντολές περιμένουν ως τον κύκλο 18 οπότε και η DIV.D της γραμμής 11 γίνεται issue. Τότε αυτή κάνει overwrite την σημαία Mul1 στον F2 και την αντικαθιστά με τη δική της Mul3.
Τι πρέπει να κάνει τότε η SUB.D; Να δει πως η σημαία Mul1 έχει διαγραφεί και να γίνει execute. Αυτό θα ήταν λάθος, καθώς η πρώτη DIV.D δεν έχει επιστρέψει ακόμα αποτέλεσμα.
Να περιμένει να απομακρυνθεί η σημαία Mul3; Και αυτό θα ήταν λάθος γιατί αυτή θέλει το αποτέλεσμα της πρώτης DIV.D.
Στην λύση φαίνεται πάντως πως η SUB.D «αισθάνεται» το τέλος της πρώτης DIV.D στον κύκλο 39 και ξεκινά το execute της.
Καλησπέρα,
On 05/26/2011 09:53 PM, George Z.P. wrote:
Καλησπέρα,
Θα ήθελα να ρωτήσω τι προβλέπει ο αλγόριθμος tomasulo στην ακόλουθη περίπτωση. Θα χρησιμοποιήσω σαν παράδειγμα την περσινή άσκηση, όπως αυτή λύνεται στο site:
Η εντολή DIV.D της γραμμής 3 μαρκάρει τον καταχωρητή F2. Έπειτα η SUB.D της γραμμής 10 σημειώνει πως πρέπει να περιμένει να απομακρυνθεί η σημαία Mul1 πριν δεσμεύσει τον πόρο της F2.
Δεν είναι ακριβώς έτσι. Για να γίνει πιο κατανοητό, θυμίζω λίγο τη σημασία του Register Result Status: ανά πάσα στιγμή, δείχνει ποιος reservation station είναι εκείνος που θα παράξει την πιο πρόσφατη τιμή (στη σειρά προγράμματος) για έναν συγκεκριμένο καταχωρητή (εφόσον βέβαια υπάρχουν μία ή περισσότερες εντολές εν εκτελέσει που τον έχουν σαν output operand, διαφορετικά προσπελάζεται κατευθείαν το register file).
Τη στιγμή που γίνεται issue η SUB.D επομένως συμβουλεύεται τον RSS και βλέπει ότι ο F2 θα παραχθεί από την εντολή που εκείνη τη στιγμή βρίσκεται στον Mul1, την 1η DIV.D δηλαδή. Η SUB.D κρατά αυτήν την πληροφορία στο πεδίο Q, *και δεν χρειάζεται να ξανασυμβουλευθεί στο μέλλον τον RSS* -- μόλις η DIV.D στον Mul1 ολοκληρωθεί, o αλγόριθμος θα κάνει αναζήτηση στα πεδία Q όλων των reservation stations για να δει ποιος περιμένει το αποτέλεσμά της, και έτσι θα μεταδόσει την τιμή αυτή στους res. stations (στα πεδία V) μέσω του CDB.
Όταν με τη σειρά της η DIV.D της γραμμής 11 γίνει issue, θα κάνει update τον RSS για τον F2 γράφοντας τη "διεύθυνση" του reservation station όπου θα εκτελεστεί (Mul3), πληροφορώντας έτσι όλες τις επόμενες εντολές ότι, όποια χρειαστεί τον F2, θα τον πάρει από τον Mul3. Και με τη σειρά της αυτή η πληροφορία θα είναι έγκυρη μέχρι την επόμενη εντολή που θα έχει σαν output operand τον F2.
Ν.
advcomparch@lists.cslab.ece.ntua.gr