Υ07 Παράλληλα Συστήματα 2013-14 5/11/2013 Οργάμωση κοιμής μμήμης (ΙΙ) Η λειτουργία της μμήμης Β. Δημακόπουλοσ
Ιεραρχία μνιμθσ & cache Επεξεργαςτισ: ταχφτατοσ Μνιμθ: αργι (και μάλιςτα θ διαφορά ταχφτθτασ αυξάνεται) Βαςικι λφςθ: κρυφι μνιμθ (cache) ΕΠ ΕΠ Ρολφ γριγορθ, πολφ ακριβι, πολφ μικρι cache Στθρίηεται ςτο γεγονόσ ότι οι εφαρμογζσ διακζτουν χωρικι και χρονικι τοπικότθτα (locality) Ροςοςτά επιτυχίασ (hit rate) 70% 95% δεν είναι ςπάνια Μ Μ Επικοινωνία με επεξεργαςτι: λέξεις Επικοινωνία με μνιμθ: blocks λέξεων >> τοποκετοφνται ςτισ γραμμζσ τθσ cache (cache lines) #2
(Κάποια από τα) Ηθτιματα των cache Μζγεκοσ cache vs. μζγεκοσ cache line Τφποσ αποκικευςθσ: Split (ξεχωριςτοί χώροι για αποκικευςθ εντολών / δεδομζνων) Unified (ενιαίοσ χώροσ για όλα) Οργάνωςθ / ςυςχετιςτικότθτα Direct-mapped Set-associative (2- or 4-ways common) Fully associative Ρολιτικζσ αντικατάςταςθσ (replacement) LRU, FIFO, random, (pseudo-lru common) #3
Συμπεριφορά ςε αναγνώςεισ (read) Read hit Θ ηθτοφμενθ λζξθ ξεχωρίηει από τθν γραμμι τθσ cache και παραδίδεται ςτον επεξεργαςτι. Read miss Το μπλοκ που περιλαμβάνει τθ ηθτοφμενθ λζξθ προςκομίηεται από τθ μνιμθ, τοποκετείται ςε μία γραμμι τθσ cache και θ λζξθ παραδίδεται ςτον επεξεργαςτι Μεγάλθ κακυςτζρθςθ Hit ration = # προςπελάςεων που ιταν hit / ςυνολικό # προςπελάςεων #4
Συμπεριφορά ςε εγγραφζσ 1. Στθν περίπτωςθ που το δεδομζνο υπάρχει ςτθν cache (write hit) Διεγγραφι (write-through): άμεςθ εγγραφι και ςτθν κφρια μνιμθ Υςτεροεγγραφι (write-back): ΔΕΝ ενθμερώνεται θ κφρια μνιμθ Ρώσ / πότε ενθμερώνεται θ κφρια μνιμθ; Μόνο όταν ζρκει θ ώρα να αντικαταςτακεί το τροποποιθμζνο (dirty) δεδομζνο ςτθν cache. Θ υςτεροεγγραφι προτιμάται: δθμιουργεί λιγότερθ κίνθςθ προσ τθ μνιμθ (αλλά επίςθσ και προβλιματα ενθμζρωςθσ ). Βελτίωςθ τθσ διεγγραφισ γίνεται με write-buffers. 2. Στθν περίπτωςθ που το δεδομζνο ΔΕΝ υπάρχει ςτθν cache (write miss) No-allocate: γίνεται εγγραφι κατευκείαν ςτθν κφρια μνιμθ Write-allocate: το δεδομζνο ζρχεται πρώτα ςτθν cache (όπωσ ςτο read) και ςτθ ςυνζχεια τροποποιείται (πιο χρονοβόρο/χωροβόρο αλλά προτιμάται μιασ και ελπίηουμε ότι κα υπάρξει read αργότερα ζτςι κι αλλιώσ) #5
Γενίκευςθ ςε πολλαπλά επίπεδα (ιεραρχία caches) Για μείωςθ του κόςτουσ αςτοχίασ (miss) 2-3 επίπεδα από αυξανόμενου μεγζκουσ και μειοφμενου κόςτουσ / ταχφτθτασ caches: ΕΠ I$ D$ L1 cache L2 cache ~ 16 64 KB, 1-4 cycles, split, write-through ~ 256 KB 8 MB, 6-15 cycles L3 cache ~ 4 32 MB, 30-50 cycles Μ ~ Gbytes, 100+ cycles #6
Inclusion / exclusion Ροφ αποκθκεφεται ζνα δεδομζνο (δθλ. ςε ποιο από όλα τα επίπεδα); Τρεισ βαςικζσ επιλογζσ: Inclusive cache: Θ cache μεγαλφτερου επιπζδου φυλάει ΟΛΕΣ τισ γραμμζσ των μικρότερων επιπζδων. Ρ.χ. L3 cache ςτουσ Intel Nehalem (Xeon 55xx) Exclusive cache: Θ cache μεγαλφτερου επιπζδου δεν φυλάει καμία γραμμι των μικρότερων επιπζδων (άρα κάκε επίπεδο αποκθκεφει εντελώσ διαφορετικά πράγματα). Ρ.χ. L3 cache ςτουσ AMD Shangai (Opteron 238x) Non-Inclusive/Non-exclusive cache: Δεν εξαςφαλίηεται τίποτε από τα δφο παραπάνω. Ρ.χ. θ L2 των Intel Sandy Bridge Ρλεονεκτιματα / μειονεκτιματα; Οι inclusive είναι γενικά πιο εφκολεσ ςτον χειριςμό των misses αλλά απαιτοφν πολφ μεγαλφτερο χώρο (π.χ. θ L2 κα πρζπει ζνα μζροσ τθσ να το αφιερώςει ςτο να κρατά αντίγραφο τθσ L1). Στισ inclusive ακφρωςθ (π.χ. αντικατάςταςθ) ςε μεγαλφτερο επίπεδο απαιτεί ακφρωςθ και ςτα μικρότερα #7
Caches ςε παράλλθλα ςυςτιματα κοινισ μνιμθσ Εκτόσ του λόγου τθσ «αργισ» κφριασ μνιμθσ, είναι απαραίτθτεσ διότι επιπλζον: Υπάρχει ςυναγωνιςμόσ επεξεργαςτών ςτισ κοινζσ μνιμεσ Το δίκτυο ςφνδεςθσ επεξεργαςτών-μνθμών ειςάγει επιπλζον κακυςτεριςεισ ΕΠ 1 ΕΠ 2 ΕΠ Ν cache cache cache ΔΙΚΣΤΟ ΔΙΑΤΝΔΕΗ ΕΠΕΞΕΡΓΑΣΩΝ ΜΝΗΜΩΝ Μ 1 Μ 2 Μ Μ #8
Το πρόβλθμα Ρρόβλθμα συνοχής εφόςον κάποιοσ μπορεί να τροποποιιςει το δικό του αντίγραφο (cache coherence) ΕΠ 1 ΕΠ 2 ΕΠ Ν cache Χ cache Χ cache ΔΙΚΣΤΟ ΔΙΑΤΝΔΕΗ ΕΠΕΞΕΡΓΑΣΩΝ ΜΝΗΜΩΝ Χ Μ 1 Μ 2 Μ Μ #9
Λφςεισ Αποτροπι του προβλιματοσ (δεν αφινουμε το πρόβλθμα να εμφανιςτεί καν): Μόνο με software με ειδικό compiler που διαχωρίηει τα κοινά δεδομζνα και δεν τουσ επιτρζπει να αντιγραφτοφν ςτισ κρυφζσ μνιμεσ Με software και hardware: Ειδικι διάταξθ που λειτουργεί ςε ςυνδυαςμό με τον compiler Το αφινουμε και το λφνουμε κατά τθν εκτζλεςθ, με hardware πρωτόκολλα ςυνοχισ (coherence protocols) πρωτόκολλα παρακολοφκθςθσ (snoopy/snooping protocols) πρωτόκολλα καταλόγων (directory-based protocols) #10
Πρωτόκολλα παρακολούθησης (snooping protocols)
Ρρωτόκολλα παρακολοφκθςθσ Δφο είδθ: εγγραφισ ενθμζρωςθσ (write-update) εγγραφισ ακφρωςθσ (write-invalidate) Συνικωσ λανκάνουςεσ μνιμεσ με πολιτικι υςτεροεγγραφισ (write-back) Μάλλον (?) εγγραφισ-ακφρωςθσ Μοντζρνεσ CPU (Pentium, UltraSparc, κλπ): όλεσ διακζτουν hardware για πρωτόκολλα παρακολοφκθςθσ (multiprocessorready) #12
Ρρωτόκολλο MSI (Write-back caches) Καταςτάςεισ γραμμισ cache: Άκυρθ (Invalid) ι δεν υπάρχει Είτε θ γραμμι δεν υπάρχει ςτθ cache (δθλαδι miss) ι μπορεί να υπάρχει αλλά ζχει ακυρωκεί (γιατί κάποιοσ άλλοσ ηιτθςε να τθν αλλάξει) Μοιραηόμενθ (Shared) Θ γραμμι δεν ζχει αλλαχκεί, επομζνωσ θ κφρια μνιμθ ζχει ενιμερο αντίγραφο Μπορεί να υπάρχουν άλλα αντίγραφα ςε άλλεσ caches Μπορεί και όχι γιατί οι αντικαταςτάςεισ γίνονται «ακόρυβα» Αλλαγμζνθ (Modified) Ζχουμε το μοναδικό ενιμερο αντίγραφο τθσ γραμμισ #13
Διάγραμμα καταςτάςεων γραμμισ Συμβολιςμόσ: Γεγονόσ/Ενζργεια PrXX γεγονόσ από τοπικό επεξεργαςτι BusXX γεγονόσ από ι ενζργεια προσ δίαυλο PrRd, PrWr ανάγνωςθ, εγγραφι από τον πυρινα Ραρόμοιο με BusRdX, χωρίσ μεταφορά δεδομζνων BusRd, BusRdX διαδικαςία ανάγνωςθσ, αποκλειςτικισ ανάγνωςθσ ςτο δίαυλο Flush δίνω τθν τιμι τθσ γραμμισ ςτο δίαυλο και ανανεώνεται θ κφρια μνιμθ (Στο δίαυλο δεν φαίνονται τα write των άλλων, παρά μόνο τα flush και Upgr) #14
Ρρωτόκολλο MESI ι Illinois Αν διαβάςουμε μια καινοφρια γραμμι και αμζςωσ μετά κζλουμε να τθν αλλάξουμε, χωρίσ να (κζλει να) παραμβλθκεί άλλοσ επεξεργαςτισ Ζχουμε 2 misses / κινιςεισ ςτο δίαυλο μία για να φζρουμε τθ γραμμι για πρώτθ φορά (κατάςταςθ S) και άλλθ μία μόνο για να αλλάξουμε τθ κατάςταςθ ςε M Αυτό γίνεται πολφ ςυχνά και ςίγουρα γίνεται και ςε ςειριακά προγράμματα (τα οποία δε κζλουμε να βαςανίηουμε!) Λφςθ: κρατάμε πλθροφορία αν ζχουμε (διαβάςει) το μοναδικό αντίγραφο τθσ γραμμισ μζχρι τώρα 4 θ κατάςταςθ: αποκλειςτικι (exclusive) Στθν κατάςταςθ αυτι ζχουμε το μοναδικό αντίγραφο και θ κφρια μνιμθ είναι ενθμερωμζνθ #15
Διάγραμμα καταςτάςεων Σιμα S ςτον δίαυλο: Αν μια cache ζχει αντίγραφο τθσ γραμμισ κζτει το ςιμα (S) Αν κανείσ δεν το κζςει (S) θ γραμμι είναι αποκλειςτικι Από S -> M δεν υπάρχει κίνθςθ ςτον δίαυλο. Flush δίνω τθν τιμι τθσ γραμμισ ςτο δίαυλο και ανανεώνεται θ κφρια μνιμθ #16
Ρρωτόκολλο MOESI Αν μετά τθν αλλαγι μιασ γραμμισ, θ γραμμι χρθςιμοποιθκεί για ανάγνωςθ, πρζπει να γραφτεί ςτθ κφρια μνιμθ flush ζξω από κατάςταςθ M H κφρια μνιμθ είναι γενικά αργι, οπότε ςυμφζρει να κακυςτεριςουμε τθν εγγραφι όςο μποροφμε Χρειαηόμαςτε μια επιπλζον κατάςταςθ όπου θ γραμμι είναι αλλαγμζνθ αλλά υπάρχουν αντίγραφα ςε άλλεσ caches: O owned HOMEWORK!! #17
Caches ςε multicores Ενώ ςε multiprocessors κάκε επεξεργαςτισ διακζτει τθν δικι του cache, ςτουσ πολυπφρθνουσ οι πυρινεσ μπορεί να μοιράηονται κάποιεσ από τθν ιεραρχία των caches #18
Pentium D Core 2 Duo Ραραδείγματα AMD Bulldozer memory hierarchy #19
Ρλεονεκτιματα κοινόχρθςτων cache Μείωςθ χρόνου επικοινωνίασ των πυρινων μζςω τθσ κοινισ cache Επεξεργαςτζσ που δουλεφουν ςε επικαλυπτόμενεσ περιοχζσ δεδομζνων Ο ζνασ μπορεί να φζρει δεδομζνα που ίςωσ χρθςιμοποιιςει κάποιοσ άλλοσ Μειώνεται ο χώροσ που απαιτείται Ταχφτθτα επικοινωνίασ μείωςθ κίνθςθσ ςτο δίαυλο Δυναμικι διαμοίραςθ Αν ζνασ επεξεργαςτισ χρειάηεται λιγότερο χώρο, κάποιοσ άλλοσ μπορεί να πάρει περιςςότερο Δεν υπάρχει κζμα ςυνοχισ ςτθν κοινόχρθςτθ cache Αποφυγι του false sharing #20
Μειονεκτιματα κοινόχρθςτθσ cache Ρολλαπλοί πυρινεσ Απαίτθςθ για μεγαλφτερο μζγεκοσ cache (και άρα και πιο αργι) Απαίτθςθ για μεγαλφτερο ρυκμό μεταφοράσ (μιασ και προςπελαφνεται από αρκετζσ cache μικρότερου επιπζδου ταυτόχρονα) Ρροςπζλαςθ από πολλαπλζσ cache μικρότερου επιπζδου => ςυνικωσ crossbar switch => κάποια αφξθςθ κακυςτζρθςθσ προςπζλαςθσ Ρολυπλοκότερθ ςχεδίαςθ Ζνασ πυρινασ μπορεί να είναι «μοναχοφάθσ» και να τθν γεμίηει με δικά του δεδομζνα, προκαλώντασ προβλιματα ςτουσ άλλουσ #21
Πρωτόκολλα καταλόγωμ (directory protocols)
Ρρωτόκολλα με καταλόγουσ Δεν υπάρχει κοινό μζςο (π.χ. διαςφνδεςθ με διακοπτικά δίκτυα ι ςυςτιματα NUMA που κα δοφμε αργότερα) Άρα αδφνατα / αςφμφορα τα πρωτόκολλα παρακολοφκθςθσ Θ μνιμθ είναι υπεφκυνθ για όλα Κατάλογοσ όπου καταγράφεται ποιεσ cache ζχουν αντίγραφο των δεδομζνων Επικοινωνία για ςυνοχι μόνο με αυτζσ τισ cache Κεντρικόσ κατάλογοσ (κακό) ι Κατανεμθμζνοι κατάλογοι #23
Κατανεμθμζνοι κατάλογοι S P P P Data Block D 1 Μ 1 D M Μ Μ Info Data Ρεδία «παρουςίασ» ςτουσ καταλόγουσ Κατανεμθμζνοι κατάλογοι: πλιρεισ (full-map directories) περιοριςμζνοι (limmited directories) αλυςιδωτοί (chained directories) IEEE SCI (Scalable Coherent Interface) ΔΙΚΣΤΟ ΔΙΑΤΝΔΕΗ ΕΠΕΞΕΡΓΑΣΩΝ ΜΝΗΜΩΝ (ΔΔΕΜ) Επεξεργαστές #24
Ρλιρεισ κατάλογοι Κατάλογος Block X σε μία μνήμη Μνήμη Κατάλογος Μνήμη C 0 0 0 0 Data C 1 1 0 0 Data Cache 1 Cache 2 read X read X 1 Cache 1 Data Cache 2 Data write X 2 Για ςυςτιματα μεςαίου μεγζκουσ Ρ.χ. 128 cpus block size / cache line = 64 bytes ποιο το μζγεκοσ του directory? Για 1024 cpus? Κατάλογος Μνήμη Κατάλογος Μνήμη D 0 1 0 0 Data C 0 1 1 0 NewData Cache 1 άκσρο Cache 2 NewData Cache 2 NewData Cache 3 NewData (read X) 3 4 #25
Μερικοί κατάλογοι Κατάλογος Μνήμη Κατάλογος Μνήμη C 1 2 Data C 3 2 Data Cache 1 Data Cache 2 Data Cache 3 Cache 1 άκσρο Cache 2 Data Cache 3 Data read X (έξωση) 1 2 Για 1024 cpus block size / cache line = 64 bytes Κ = χώροσ για 10 αντίγραφα ποιο το μζγεκοσ του directory? Κ = 5 είναι αρκετόσ χώροσ για να περιορίςει πολφ τισ ςυχνζσ εξώςεισ. #26
Αλυςιδωτοί κατάλογοι απλι ςφνδεςθ Στζλνονται τα data και το id τθσ κεφαλισ Κατάλογος Μνήμη Κατάλογος Μνήμη C 3 Data C 2 Data Cache 1 Data Cache 2 Cache 3 Data 1 read X Cache Data Cache 2 Data 3 Cache 3 Data 1 1 2 Write hit ςτην cache C: Θ cache C ςτζλνει Write Request ςτθ μνιμθ Θ μνιμθ ςτζλνει πακζτο (Invalidate, C) ςτθν κεφαλι τθσ λίςτασ Το πακζτο ακυρώνει το αντίγραφο και προωκείται ςτον επόμενο κόμβο Ο τελευταίοσ κόμβοσ ςτζλνει Invalidate Acknowledge ςτον C. Replacement ςε μία cache: Θ cache ςτζλνει Invalidate ςτθ μνιμθ Το Invalidate προωκείται και ακυρώνεται όλθ θ αλυςίδα. #27
Αλυςιδωτοί κατάλογοι διπλι ςφνδεςθ Ραράδειγμα υλοποίθςθσ: Replacement: Roll out τθσ cache με επικοινωνία με προθγοφμενο + επόμενο κόμβο Write hit: θ cache C πρζπει να πάρει exclusive access Διαβάηει πάλι το δεδομζνο ώςτε να μπει ςτθν κορυφι τθσ λίςτασ Στζλνει purge (invalidation) ςτον επόμενο κόμβο ο οποίοσ ακυρώνει το αντίγραφό του και επιςτρζφει acknowledgement + το id του επόμενου Συνεχίηεται μζχρι να ςτείλει acknowledgement ο τελευταίοσ ςτθ λίςτα Τυπικό παράδειγμα: IEEE Scalable Coherent Interface (SCI) Θα τα ξαναδοφμε όταν μιλιςουμε για μθχανζσ ccnuma #28
Συμέπεια μμήμης (memory consistency)
Ζνα απλό πρόγραμμα Initially A = B = 0 Process P1 A = 1; /* write(a) */ B = 1; /* write(b) */ Process P2 printf( %d, B); /* read(b) */ printf( %d, A); /* read(a) */ Εκτφπωςθ: 10 (!? Call service?) Αποδεκτζσ εκτυπώςεισ: 00, 11, 11 Το πρωτόκολλο ςυνζπειασ (cache coherency) εξαςφαλίηει ότι τα αντίγραφα μίασ μεταβλθτισ κα είναι πάντα ενθμερωμζνα. Αν τροποποιοφνται δφο άςχετεσ μεταξφ τουσ μεταβλθτζσ; Δεν εξαςφαλίηει πώσ / πότε / με ποια ςειρά γίνονται οι ενθμερώςεισ τουσ (κάκε μία κα είναι τελικά ΟΚ αλλά μζχρι να ενθμερωκοφν τα αντίγραφα τθσ μίασ, μπορεί να ενθμερώνονται ανεξάρτθτα και ταυτόχρονα τθσ άλλθσ). #30
Σειρά προγράμματοσ Θζλουμε το read από μία κζςθ μνιμθσ να επιςτρζφει πάντα τθν πιο πρόςφατθ τιμι που ζγινε write εκεί, όχι μία παλιότερθ τιμι. Δεν αρκεί μόνο αυτό όμωσ! Ρρζπει οι προςπελάςεισ ςε διαφορετικζσ κζςεισ να ακολουκοφν μία γενικότερθ ςειρά. Το μοντέλο συνέπεια μνήμης (memory consistency model) κακορίηει τθ ςειρά με τθν οποία οι προςπελάςεισ φαίνονται ςτουσ επεξεργαςτζσ Θ «λογικι» λειτουργία εξαςφαλίηεται από τθν «ακολουκιακι ςυνζπεια» (sequential consistency) #31
Ακολουκιακι ςυνζπεια Κάκε CPU ολοκλθρώνει τισ αναφορζσ τθσ ςτθ μνιμθ με τθ ςειρά προγράμματόσ τθσ Πλεσ οι αναφορζσ ςτθ μνιμθ γίνονται αδιαίρετα ατομικότθτα ςειριοποίθςθ CPU 1 CPU 2 CPU N MNHMH #32
SC Ικανζσ (όχι αναγκαίεσ) ςυνκικεσ για SC: 1. κάκε νιμα ξεκινάει προςπελάςεισ μνιμθσ με τθ ςειρά του προγράμματοσ 2. όταν ζνα νιμα ξεκινάει μια εγγραφι, το νιμα πρζπει να περιμζνει να ολοκλθρωκεί θ εγγραφι πριν ξεκινιςει τθν επόμενθ προςπζλαςθ 3. όταν ζνα νιμα ξεκινιςει μια ανάγνωςθ, το νιμα πρζπει να περιμζνει να ολοκλθρωκεί θ ανάγνωςθ και θ εγγραφι τθν τιμι τθσ οποίασ θ ανάγνωςθ φζρνει, πριν ξεκινιςει τθν επόμενθ προςπζλαςθ Το πιο λογικό μοντζλο, δουλεφουν όλοι οι αλγόρικμοι ςυγχρονιςμοφ χαμθλοφ επιπζδου, π.χ. αλγόρικμοσ Dekker: Initially A = B = 0 Process P1 A = 1; if (B == 0) <critical section> Process P2 B = 1; if (A == 0) <critical section> #33
SC Για να εγγυθκεί τθν ακολουκιακι ςυνζπεια, ζνα παράλλθλο ςφςτθμα δεν μπορεί να χρθςιμοποιεί μια ςειρά από αρχιτεκτονικζσ τεχνικζσ αφξθςθσ απόδοςθσ. Υποχρεωτικά περιοριςμοί ςτθ ςχεδίαςθ CPU και compilers: Most ILP techniques (e.g. pipelining with overlapping memory operations), out-of-order execution, speculative execution etc. Register allocation, subexpression elimination, loop transformations BE CAREFUL: USE: avoid register variables for sensitive data volatile for sensitive variables Λόγω των παραπάνω, υλοποιείται πολφ ςπάνια. Ραράδειγμα: SGI Origin 2000 (helios.cc.uoi.gr) based on MIPS R10000 processors CPU overlaps memory operations (i.e. NON-ATOMIC) but COMPLETES them in program order Memory subsystem guarantees atomicity. Thus machine has SC. #34
Τι χάνουμε από τθν SC Υποκζςτε: Ρρωτόκολλο καταλόγων με 5 CPUs να ζχουν αντίγραφο μίασ μεταβλθτισ, και θ CPU 1 κζλει να τθν τροποποιιςει (write) Για ατομικότθτα τθσ εγγραφισ: Θ CPU 1 ηθτά exclusiveness (20 cycles) Θ μνιμθ ςτζλνει ςτισ υπόλοιπεσ invalidations (10 cycle κάκε μία) Cache invalidation + acknowledgement ςτθ μνιμθ (50 cycles) για κάκε μία από τισ 4 caches Θ μνιμθ παραχωρεί exclusiveness ςτθ CPU 1 (20 cycles) Συνολικόσ απαιτοφμενοσ χρόνοσ: 20 + 4 10 + 50 + 20 = 130 cycles. ΕΩΤΘΣΘ: Γιατί όχι μόνο 20? ΑΡΑΝΤΘΣΘ: Κανζνα πρόβλθμα! Ξεχνάμε όμωσ τθσ ατομικότθτα και τθν ακολουκιακι ςυνζπεια. #35
Χαλαρά μοντζλα ςυνζπειασ Ξεχνάμε τθ ςειρά προγράμματοσ Επιτρζπονται οι προςπελάςεισ εκτόσ ςειράσ (εφόςον είναι ςε διαφορετικζσ κζςεισ μνιμθσ) Άρα επιτρζπονται τεχνικζσ ILP ςτουσ επεξεργαςτζσ και optimization ςτουσ compilers Μερικζσ φορζσ κυςιάηεται και θ ΑΤΟΜΙΚΟΤΘΤΑ των εγγραφών (π.χ. PC processor consistency, Intel) Τα διάφορα χαλαρά μοντζλα χαρακτθρίηονται από το ποιεσ προςπελάςεισ επιτρζπεται να αναδιαταχτοφν. Οι τζςςερισ πικανοί ςυνδυαςμοί είναι: Write(x); Read(y) ; Write(x); Write(y); Read(x); Read(y); Read(x); Write(y); ι απλά: W->R, W->W, R->R, R->W #36
Ρ.χ. χαλαρώνοντασ τθ ςειρά W->R (ςχετικά «ανώδυνο») Επιτρζπεται ζνα επόμενο read να ξεκινιςει πριν από προθγοφμενο write Sun SPARC (TSO total store order) Intel Pentium Pro, MMX (PC processor consistency τα write είναι μθατομικά) Initially A = flag = 0 A = 1; flag = 1; Process P1 Process P2 while (flag == 0) ; print( %d, A); Initially A = B = 0 Process P1 Process P2 Process P3 A = 1; while (A == 0) ; B = 1; while (B == 0) ; printf( %d, A); #37
Χαλαρώνοντασ όλεσ τισ ςειρζσ Επιτρζπεται να αναδιαταχτοφν οποιεςδιποτε προςπελάςεισ ςε διαφορετικζσ κζςεισ μνιμθσ. Ρ.χ. weak order (sync and non-sync memory accesses) και release consistency (acquire, release and normal accesses) Ράντα παρζχονται εντολζσ memory barriers ι fences οι οποίεσ όταν ειςάγονται ςε ζνα ςθμείο του προγράμματοσ εξαςφαλίηουν ότι: Πλεσ οι προθγοφμενεσ προςπελάςεισ ζχουν ολοκλθρωκεί πριν ξεκινιςουν οι προςπελάςεισ που ζπονται. Κανονικά ςε γλώςςα μθχανισ, ο gcc όμωσ παρζχει «ςυνάρτθςθ» που μπορεί να κλθκεί από C: sync_synchronize(); #38
Συμπεραςματικά Οι προγραμματιςτζσ υποκζτουν ςυνικωσ το «λογικό» μοντζλο τθσ ακολουκιακισ ςυνζπειασ Θ ακολουκιακι ςυνζπεια απαγορεφει αρκετζσ βελτιςτοποιιςεισ ςε επεξεργαςτζσ και μεταφραςτζσ Τα χαλαρότερα μοντζλα ζχουν δυνατότθτα αυξθμζνων επιδόςεων (όχι εξωφρενικά καλφτερεσ όμωσ ) και είναι ςχεδόν πάντα αυτά που χρθςιμοποιοφνται Πμωσ, ςχεδόν καμία εφαρμογι δε χρειάηεται να απαςχολείται με το μοντζλο ςυνζπειασ που υποςτθρίηει το hardware Εκτόσ αν θ εφαρμογι χρθςιμοποιεί χαμθλοφ επιπζδου ςυγχρονιςμό μεταξφ νθμάτων Ρ.χ. προγραμματιςμόσ ςυςτιματοσ (λειτουργικά ςυςτιματα, βιβλιοκικεσ, μεταφραςτζσ κλπ) Βιβλιογραφία Βλ. προπτυχιακό μάκθμα ΡΛΕ-079 Ραλιό αλλά καλό survey: Sarita V. Adve, Kourosh Gharachorloo, Shared Memory Consistency Models: A Tutorial, IEEE Computer 29 (12): 66 76, Dec. 1996 Οποιοδιποτε ςφγχρονο βιβλίο αρχιτεκτονικισ παράλλθλων ςυςτθμάτων. #39