Καλησπέρα σε όλους!
Εκτελώντας τον αλγόριθμο με 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 πριν την πρόβλεψη;
Ευχαριστώ πολύ,
Γιάννης