Καλημέρα, έχοντας ολοκληρώσει τις προσομοιώσεις των 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 κτλ) ;
Ευχαριστώ πολύ Αλέξανδρος Δαγκλής