[Advcomparch] Υποθετική εκτέλεση εντολών και register renaming με ROB

Τσιχριτζή Τσιχριτζή
Sun Jun 10 18:17:40 EEST 2012


 Καλησπέρα σε όλους!

 Εκτελώντας τον αλγόριθμο με 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 πριν την πρόβλεψη;

 Ευχαριστώ πολύ,
 Γιάννης


More information about the Advcomparch mailing list