Καλησπέρα, Εμένα η ερώτησή μου είναι πάνω στο εξής. Υποθέτουμε τις εξής τρεις εντολές και οι οποίες δρομολογούνται με τον ακόλουθο τροπο στον αλγ Τomasulo(Σεπτ-2010) ΟP IS EX WR CMT ADDI R2, R2, #8 || 17 18 20 27 || CDB conflict ADDI R1, R1, #1 ||18 19 21 28 || CDB conflict SUBI R5, R5, #1 ||19 20 23 29 ||CDB conflict
Με ένα non-pipelined int FU.Στον κύκλο 18 ολοκληρώνεται η πρώτη ADDI όμως δεν μπορεί να κάνει broadcast.Συνεπώς η εντολή δεν stall-αρει μες το FU??Πως εισέρχεται στην ίδια-μονάδα η επόμενη εντολή.??
Καλησπέρα,
πολύ καλή ερώτηση. Γενικά, οι εικόνες του hardware που υλοποιεί τον αλγόριθμο Tomasulo (στο βιβλίο σας και τις διαφάνειες) δείχνουν ότι το πέρασμα του αποτέλεσματος ενός FU γίνεται από το ίδιο το FU πάνω στο CDB. Προφανώς λοιπόν αν εκείνη τη στιγμή το CDB δεν είναι ελεύθερο το FU θα πρέπει να stall-άρει προκειμένου να διατηρήσει το αποτέλεσμα και να το μεταδώσει σε μια επόμενη χρονική στιγμή.
Αυτό όμως δε σημαίνει (όπως νομίζω συζητήθηκε και στο μάθημα) ότι στην πραγματικότητα δεν μπορούν να υπάρχουν κάποιοι buffers μεταξύ των FUs και του CDB έτσι ώστε να διασφαλιστεί η χρήση των FUs από (κάποιο περιορισμένο προφανώς αριθμό από) επόμενες εντολές.
Γενικά αυτό δεν είναι κάτι περίεργο που δεν έχετε ξαναδεί. Σε άλλες ασκήσεις έχουμε δει ας πούμε ένα FU να κάνει σε ένα κύκλο το WR του αποτελέσματος της εντολής που μόλις ολοκληρώθηκε και ταυτόχρονα στον ίδιο κύκλο να ξεκινάει και το execution της επόμενης εντολής στο ίδιο FU. Προφανώς για να μπορεί να υλοποιηθεί αυτό στο hardware απαιτείται κάποιο buffering ή τέλος πάντων κάποια απεμπλοκή της εγγραφής του αποτελέσματος στο CDB από το υπόλοιπο FU που εκτελεί τις εντολές.
Στη συγκεκριμένη λύση έχει γίνει λοιπόν αυτή η υπόθεση (για λόγους απλότητας), ότι δηλαδή υπάρχει κάποιος buffer που κρατάει το αποτέλεσμα από το FU μέχρι να ελευθερωθεί το CDB. Από εκεί και πέρα όμως, αν κάποιος στο παράδειγμα που αναφέρεται, stall-αρε το FU και εξηγούσε στο σχόλιο ποιο είναι το πρόβλημα, η λύση είναι απόλυτα αποδεκτή.
Κ.
On 06/28/2011 08:20 PM, George Marinellis wrote:
Καλησπέρα, Εμένα η ερώτησή μου είναι πάνω στο εξής. Υποθέτουμε τις εξής τρεις εντολές και οι οποίες δρομολογούνται με τον ακόλουθο τροπο στον αλγ Τomasulo(Σεπτ-2010) _ΟP_ IS EX WR CMT ADDI R2, R2, #8 || 17 18 20 27 || CDB conflict ADDI R1, R1, #1 ||18 19 21 28 || CDB conflict SUBI R5, R5, #1 ||19 20 23 29 ||CDB conflict
Με ένα non-pipelined int FU.Στον κύκλο 18 ολοκληρώνεται η πρώτη ADDI όμως δεν μπορεί να κάνει broadcast.Συνεπώς η εντολή δεν stall-αρει μες το FU??Πως εισέρχεται στην ίδια-μονάδα η επόμενη εντολή.??
Advcomparch mailing list Advcomparch@lists.cslab.ece.ntua.gr http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch
Σύμφωνα με αυτό:
"Σε άλλες ασκήσεις έχουμε δει ας πούμε ένα FU να κάνει σε ένα κύκλο το WR του αποτελέσματος της εντολής που μόλις ολοκληρώθηκε και ταυτόχρονα στον ίδιο κύκλο να ξεκινάει και το execution της επόμενης εντολής στο ίδιο FU. Προφανώς για να μπορεί να υλοποιηθεί αυτό στο hardware απαιτείται κάποιο buffering ή τέλος πάντων κάποια απεμπλοκή της εγγραφής του αποτελέσματος στο CDB από το υπόλοιπο FU που εκτελεί τις εντολές."
στο θέμα 3 του Ιουλίου 2010 δε θα έπρεπε η 4η στη σειρά εντολή DBEQ F2, F4, L1 να γίνει issue στον κύκλο 9, δηλαδή μόλις τελειώσει το execution της εντολής ADDD F0, F1, F0. Γιατί η εντολή γίνεται issue στον κύκλο 10;
Αυτό που είπα στο προηγούμενο email έχει να κάνει με FUs (functional units) και όχι RSs (reservation stations).
To IS δεν έχει να κάνει με τα FUs. Μια εντολή θα γίνει issued αν υπάρχει available entry στα RS και στον ROB. Επίσης τα RS γίνονται reset (απελευθερώνονται) όταν μεταδοθεί στον CDB το αποτέλεσμα της εντολής τους.
Επομένως, στο σημείο που αναφέρεσαι η DBEQ περιμένει να απελευθερωθεί ένα RS για προσθέσεις/αφαιρέσεις floating point αριθμών. Αυτό συμβαίνει στον κύκλο 9 που γίνεται το WR, οπότε στον επόμενο μπορεί να γίνει το IS.
K.
On 06/28/2011 10:14 PM, Ira Sofia Ktena wrote:
Σύμφωνα με αυτό:
"Σε άλλες ασκήσεις έχουμε δει ας πούμε ένα FU να κάνει σε ένα κύκλο το WR του αποτελέσματος της εντολής που μόλις ολοκληρώθηκε και ταυτόχρονα στον ίδιο κύκλο να ξεκινάει και το execution της επόμενης εντολής στο ίδιο FU. Προφανώς για να μπορεί να υλοποιηθεί αυτό στο hardware απαιτείται κάποιο buffering ή τέλος πάντων κάποια απεμπλοκή της εγγραφής του αποτελέσματος στο CDB από το υπόλοιπο FU που εκτελεί τις εντολές."
στο θέμα 3 του Ιουλίου 2010 δε θα έπρεπε η 4η στη σειρά εντολή DBEQ F2, F4, L1 να γίνει issue στον κύκλο 9, δηλαδή μόλις τελειώσει το execution της εντολής ADDD F0, F1, F0. Γιατί η εντολή γίνεται issue στον κύκλο 10;
Advcomparch mailing list Advcomparch@lists.cslab.ece.ntua.gr http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch
advcomparch@lists.cslab.ece.ntua.gr