[Advcomparch] Απορίες πάνω στα θέματα της εαρινής του 2013

Ilias-Stylianos Karabasis karabasis.ilias at gmail.com
Mon Sep 8 00:59:59 EEST 2014


Καλησπέρα/Καλήμερα.

Στο θέμα 2ο της εαρινής του 2013
<http://www.cslab.ece.ntua.gr/courses/advcomparch/2013/files/exams/adv_ca-Jul2013.pdf>
όταν
δυο επεξεργαστές έχουν το ίδιο block σε κατάσταση shared και το ζητήσει
ένας τρίτος, κατάσταση που συμβαίνει για την πρόσβαση P3: read 0x00000000,
τότε υποθέτουμε ότι ένας από τους άλλους δυο θα στείλει το block στον P3?
Κι αν ναι, αυτός που θα το στείλει επιλέγεται στην τύχη? Επίσης, στην ίδια
περίπτωση θα έχουμε μεταφορά προς τη μνήμη? Γνώμη μου είναι ότι κάτι τέτοιο
είναι περιττό αφού η μνήμη έχει ενημερωθεί για το συγκεκριμένο block στην
πρόσβαση P1: read 0x00000004 όπου το block έγινε shared από τους P0 και P1,
από modified που ήταν αρχικά στον P0.

Στο θέμα 4ο της ίδιας χρονιάς τώρα. Αναφέρεται στην εκφώνηση ότι το cache
hit διαρκεί 1 κύκλο, η μεταφορά μιας cache line (προς cache ή προς κύρια
μνήμη) διαρκεί 8 κύκλους και τα BusRd/BusRdX bus transactions διαρκούν 2
κύκλους. Οι απορίες μου είναι η εξής:

   1. Όταν κάνουμε miss τότε θέλουμε 8 κύκλους για να φέρουμε το δεδομένο
   στη μνήμη. Μέσα σε αυτούς τους 8 κύκλους θεωρούμε ότι γίνεται και η
   ανάγνωση του δεδομένου από τον επεξεργαστή ή, όπως λέγαμε και στο 5ο
   εξάμηνο, ξαναεκτελείται η εντολή μετά την μεταφορά και κάνει hit, οπότε
   θέλουμε συνολικά 8+1 κύκλους?
   2. Όταν λέμε ότι διαρκεί 2 κύκλους το BusRd/BusRdX transaction εννοούμε
   ότι χρειάζονται 2 κύκλοι για να μεταφερθεί το δεδομένο block από την cache
   του ενός στην cache του άλλου ή ότι χρειάζονται 2 κύκλοι για την αίτηση και
   επιπλέον 8 κύκλοι για την cache2cache μεταφορά? Επίσης χρειάζεται και εδώ
   το +1 που αναφέρω και παραπάνω? Δηλαδή είναι 2+1 ή αντίστοιχα 8+2+1 κύκλοι?
   3. Η απορία αυτή είναι πιο γενική, αλλά εμφανίστηκε με αφορμή αυτό το
   θέμα. Όταν δυο *διαφορετικά* blocks της μνήμης μας κάνουν map στο ίδιο
   cache-line τότε το ένα δεν μπορεί να ακυρώσει το άλλο, ε? Για να γίνω πιο
   κατανοητός θα αναφέρω το παράδειγμα από το 4ο Θέμα. Ο P2 έχει σε κατάσταση
   modified το cache-line που περιέχει το block x[0].a-x[0].b. Ο P1 θέλει να
   διαβάσει από τη μνήμη το block x[8].a-x[8].b που είναι μεν διαφορετικό από
   το x[0].a-x[0].b, αλλά τυχαίνει να κάνουν map στο ίδιο cache-line. Υποθέτω
   ότι το λογικό είναι η cache-line του P2 να παραμείνει modified και η
   cache-line του P1 να γίνει exclusive. Το ρωτάω αυτό γιατί σε συζητήσεις που
   είχαμε στο φόρουμ ορισμένοι συνάδελφοι θεωρούσαν ότι με την πρόσβαση που
   κάνει ο P1, ο P2 θα έπρεπε να κάνει write-back στην μνήμη το block που είχε
   και στη συνέχεια να θέσει την cache-line του σε κατάσταση invalid.
   Προσωπικά κάτι τέτοιο το θεωρώ μη αποδοτικό γιατί θα οδηγούσε σε πάρα πολλά
   misses. Αν δεν κάνω λάθος, σε αυτή την περίπτωση δεν έχουμε false-sharing,
   γιατί το false-sharing αναφέρεται σε διαφορετικά δεδομένα του *ίδιου* block.
   Οπότε δεν υπάρχει λόγος να επηρεαστεί ο P2. Διορθώστε με αν κάτι δεν έχω
   καταλάβει καλά.

Ευχαριστώ εκ των προτέρων για τις όποιες απαντήσεις.
Με εκτίμηση,
Η. Κ.

-- 
Ilias-Stylianos Karabasis
*+30 6976724404*
Studeng at School of Electrical
& Computer Engineering
National Technical University of Athens
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cslab.ece.ntua.gr/pipermail/advcomparch/attachments/20140908/9c5a8df0/attachment.htm>


More information about the Advcomparch mailing list