Με αφορμή τις εκφωνήσεις στα διαγωνίσματα μου δημιουργήθηκαν κάποιες απορίες γενικού ενδιαφέροντος.
Ειδικότερα με απασχολεί η superscalar περίπτωση και η pipeline διαχείριση των Load & Stores
*SCENARIO*
Ας πούμε ότι είμαστε σε απλή non-superscalar αρχιτεκτονική και θέλουμε να εκτελέσουμε τις ακόλουθες δύο εντολές με αλγόριθμο Tomasulo:
ld r1, 0 (address) ld r2, 1 (address) Ας υποθέσουμε ότι: 1) το cache block χωραει από [address+0]...[address+7] 2) το block δεν βρίσκεται στην cache, συνεπώς έχουμε miss. 5) Hit time = 2, Miss time = 5
A) Υποθέτω ότι αν είναι non-pipelined το function unit που χρησιμοποιεί το load τότε αναγκαστικά θα τρέξει μόνο η πρώτη εντολή το EXECUTE και θα κάνει miss ενώ η δεύτερη θα περιμένει και στην συνέχεια θα κάνει hit
B) Αν τώρα υποθέσουμε ότι είναι pipelined το function unit , η ερώτηση μου είναι τότε η πρώτη και πάλι θα δει miss, και θα διαρκέσει από το 2ο εως τον 7ο γύρο αλλά η δεύτερη δεν θα δει επίσης το block να βρίσκεται στην cache και εκείνη θα κάνει και εκείνη miss ή στις caches υπάρχει κάποιο πρωτόκολλο στην περίπτωση που προσπαθήσεις να κάνεις read κάτι που βρίσκεται σε διαδικασία μεταφοράς?
Γιατί αν παράδειγμα : από το 2ο εως το 7ο τρέχει η 1η load από το 3ο εως το 8ο τρέχει 2η load Αρχίζω να αναρωτιέμαι διάφορα πράγματα για το consistency της διαδικασίας...
Γ) Επίσης σε περίπτωση που έχουμε superscalar αρχιτεκτονική και έχουμε ας πούμε δύο cdb, γράφουν ταυτόχρονα στην cache?
Δ) Τέλος κάτι ίσως προφανέστερο των παραπάνω. Αν έχουμε 2- superscalar αρχιτεκτονική π.χ και έχουμε δύο data bus, αλλά η μνήμη μας παρέχει ένα port, τότε υποθέτω ότι έχουμε bottleneck και θα αναγκαστεί η μία εκ των δύο load ακόμα και αν είναι για ανεξάρτητα block να περιμένει σωστά?
Ευχαριστώ πολύ προκαταβολικά Μανόλης.