Καλησπέρα σε όλους!
Εκτελώντας τον αλγόριθμο με ROB μου γεννήθηκε μια απορία σχετικά με τις προβλέψεις διακλαδωσης.
Έστω ότι βρισκόμαστε στον κύκλο 20 και μία εντολή που βρίσκεται στο ROB 1 είναι έτοιμη να κάνει commit στον κύκλο 21. Έστω επίσης ότι αυτή η εντολή θα γράψει έναν καταχωρητή R1. Υποθέτουμε ότι στον ίδιο κύκλο ( 20 ) έχει γίνει issue μία εντολή στον ROB 8 η οποία αφορά τον ίδιο καταχωρητή. Τότε (στον κύκλο 20) το πεδίο Qi του R1 αλλάζει και πλέον αντί για τον ROB 1 δείχνει τον ROB 8. Επομένως στον κύκλο 21 η πρώτη εντολή γίνεται commit χωρίς όμως να γράψει στον R1 τα αποτελέσματά της. (ελπίζω ως εδώ να μην κάνω κάποιο λάθος)
Αν όμως η μεταγενέστερη εντολή εκτελείται υποθετικά, δηλαδή κατόπιν πρόβλεψης διακλάδωσης, και η πρόβλεψη αποδειχθεί λανθασμένη τότε η εντολή αυτή κάποια στιγμή θα απορριφθεί. Όμως, σε αυτή την περίπτωση, ο καταχωρητής R1 δεν θα έχει πάρει τα προηγούμενα σωστά δεδομένα απ' τον ROB 1 όταν έπρεπε.
Τι γίνεται λοιπόν σε αυτή την περίπτωση; Ποια θα είναι τα δεδομένα του R1 μετά το flush που θα γίνει στον ROB; Υπάρχει μηχανισμός που να "ανακτά" την προηγούμενη κατάσταση του R1 πριν την πρόβλεψη;
Ευχαριστώ πολύ, Γιάννης
advcomparch@lists.cslab.ece.ntua.gr