Τι συμβαίνει δεδομένου ότι το miss time στο πρώτο είναι 6 και το hit time στο r2 είναι 2? Mε την διαπίστωση του miss, θα σβηστεί στον πρώτο χρόνο ότι υπάρχει στην cache ? Γιατί π.χ αν δεν σβηστούν και προλάβει να διαβάσει το r2 ότι θέλει, το LRU θα μετακινηθεί και άρα τα δεδομένα της address θα έπρεπε αλλού να αποθηκευτούν
To πότε ενημερώνεται η LRU και επιλέγεται το victim που θα γίνει evict είναι θέμα υλοποίησης. Θα διακινδύνευα να πω ότι συνήθως γίνεται όταν έρχεται το καινούριο block μέσα στην cache.
Σε κάθε περίπτωση, στο πλαίσιο της άσκησης μπορείτε να κάνετε όποια παραδοχή θέλετε.
Κ.
Στις 7 Ιουλίου 2015 - 5:37 μ.μ., ο χρήστης Εμμανουήλ Βλατάκης-Γκαραγκούνης tetraktida42@gmail.com έγραψε:
Ειδικότερα με απασχολεί η superscalar περίπτωση και η pipeline διαχείριση των Load & Stores
SCENARIO
Ας πούμε ότι είμαστε σε απλή non-superscalar αρχιτεκτονική και θέλουμε να εκτελέσουμε τις ακόλουθες δύο εντολές με αλγόριθμο Tomasulo:
ld r1, 0 (address) ld r2, 1 (address) Ας υποθέσουμε ότι:
- το cache block χωραει από [address+0]...[address+7]
- το block δεν βρίσκεται στην cache, συνεπώς έχουμε miss.
- 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 να περιμένει σωστά?
Ευχαριστώ πολύ προκαταβολικά Μανόλης.
+) Επίσης ένα πάλι παράδοξο σενάριο είναι να έχουμε:
ld/st r1, 0 ( address ) ld/st r2, 0 ( address' )
- να βρίσκεται το block της address στην cache
- το block της address και της address' στην cache συμπίπτουν
Από απορία τι συμβαίνει δεδομένου ότι το hit time στο πρώτο είναι 2 ή 3 και το miss time στο r2 είναι 5. Καθώς μεταφέρεται κάτι από τον επεξεργαστή στην cache ταυτόχρονα μεταφέρεται και από την μνήμη στην cache? Πάλι το consistency μου φαίνεται περίεργο.
advcomparch@lists.cslab.ece.ntua.gr