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