Καλημέρα, έχοντας ολοκληρώσει τις προσομοιώσεις των predictors, παρατήρησα κάτι που με μπέρδεψε και αφορά πρώτα στην θεωρητική κατανόηση και δευτερευόντως στην υλοποίηση. Για παράδειγμα, στον n-bit predictor, στο διάγραμμα μεταβάσεων (διαφάνεια 22) φαίνεται πως ουσιαστικά σε κάθε εξεταζόμενο branch, η πρόβλεψη διαμορφώνεται ως η προηγούμενη πρόβλεψη ολισθημένη κατά 1 bit προς τα αριστερά με το νέο τελευταίο ψηφίο να είναι 0 αν το branch ήταν ΝΤ και 1 αν ήταν Τ. π.χ. με 3 bits από 100 με επιτυχή διακλάδωση θα γίνει 001 και όχι 101. Δεν είναι δηλαδή ένας "μετρητής". Αν όντως είναι έτσι και δεν έχω μπερδευτεί, τότε γιατί στον nbit_predicotr.h το update γίνεται ως εξής:
unsigned char *c = &tab[((nbit_update*)u)->index]; if (taken) { if (*c < counter_limit) (*c)++; } else { if (*c > 0) (*c)--; }
Μήπως παρανοώ κάτι;
Στην ίδια λογική, στον local predictor (και κατ' επέκταση στον global predictor, αφού είναι ειδική περίπτωσή του) τα περιεχόμενα του bht διαμορφώνονται με τον ίδιο τρόπο (με shift κτλ) ;
Ευχαριστώ πολύ Αλέξανδρος Δαγκλής
Καλημέρα,
ο κάθε predictor είναι στην ουσία ένα Finite State Machine (FSM) και ο σχεδιαστής ορίζει με ποιο τρόπο περνάει από τη μια κατάσταση στην άλλη. Πράγματι στη διαφάνεια 22 δίνεται ένα FSM το οποίο δεν περιγράφει ένα απλό μετρητή. Εμείς όμως στο μάθημα αλλά και στις ασκήσεις, όταν μιλάμε για n-bit predictors αναφερόμαστε σε "μετρητές", εκτός αν διευκρινίζουμε κάτι διαφορετικό.
Κ.
On 05/07/2011 01:14 PM, Alexandros Dagklis wrote:
Καλημέρα, έχοντας ολοκληρώσει τις προσομοιώσεις των predictors, παρατήρησα κάτι που με μπέρδεψε και αφορά πρώτα στην θεωρητική κατανόηση και δευτερευόντως στην υλοποίηση. Για παράδειγμα, στον n-bit predictor, στο διάγραμμα μεταβάσεων (διαφάνεια 22) φαίνεται πως ουσιαστικά σε κάθε εξεταζόμενο branch, η πρόβλεψη διαμορφώνεται ως η προηγούμενη πρόβλεψη ολισθημένη κατά 1 bit προς τα αριστερά με το νέο τελευταίο ψηφίο να είναι 0 αν το branch ήταν ΝΤ και 1 αν ήταν Τ. π.χ. με 3 bits από 100 με επιτυχή διακλάδωση θα γίνει 001 και όχι 101. Δεν είναι δηλαδή ένας "μετρητής". Αν όντως είναι έτσι και δεν έχω μπερδευτεί, τότε γιατί στον nbit_predicotr.h το update γίνεται ως εξής:
unsigned char *c = &tab[((nbit_update*)u)->index]; if (taken) { if (*c < counter_limit) (*c)++; } else { if (*c > 0) (*c)--; }
Μήπως παρανοώ κάτι;
Στην ίδια λογική, στον local predictor (και κατ' επέκταση στον global predictor, αφού είναι ειδική περίπτωσή του) τα περιεχόμενα του bht διαμορφώνονται με τον ίδιο τρόπο (με shift κτλ) ;
Ευχαριστώ πολύ Αλέξανδρος Δαγκλής
Advcomparch mailing list Advcomparch@lists.cslab.ece.ntua.gr http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch
advcomparch@lists.cslab.ece.ntua.gr