Τ07 ΠΑΡΑΛΛΗΛΑ ΤΣΗΜΑΣΑ Διδάσκων: Β. Δημακόπουλος dimako@cse.uoi.gr
Υ07 Παράλληλα Συστήματα 2015-16 27/2/2018 Εισαγωγή στα Παράλληλα Συστήματα (Οργάνωση-Προγραμματισμός)
Οργάνωςθ του μακιματοσ Διδάςκων: Β. Δθμακόπουλοσ (Β33 dimako@cse.uoi.gr) Διαλζξεισ Τρίτεσ, 10:00 13:00 Ωσ μεταπτυχιακοί φοιτθτζσ, δεν επιτρζπεται καμία απουςία, χωρίσ ςυνεννόθςθ με τουσ διδάςκοντεσ ΑΡΠ ΡΙΝ. Μελζτθ papers, προετοιμαςία παρουςίαςθσ και ςυηιτθςθ ςτθν τάξθ Μετράει θ ςυμμετοχι Εργαςίεσ (ςτο χαρτί και προγραμματιςτικζσ) Κάκε 2 εβδομάδεσ περίπου Project Μελζτθ προβλιματοσ και ανάπτυξθ εφαρμογισ Θα ποφμε παραπάνω πράγματα ςε λίγο καιρό 3
Οργάνωςθ του μακιματοσ Ρρόοδοσ / τελικζσ εξετάςεισ (???) Θα εξαρτθκοφν από τον αρικμό των φοιτθτϊν Ρολλοί: εξετάςεισ και (αναγκαςτικά) ομαδικά project Αρκετοί: πρόοδοσ και projects, όχι τελικζσ εξετάςεισ Λίγοι: project και παραπάνω αςκιςεισ για αποφυγι εξετάςεων Εξαρτάται βζβαια και από το πϊσ ορίηεται το «πολλοί», «αρκετοί» και «λίγοι» Βακμολογία Ράλι, κα εξαρτθκεί από τον αρικμό των φοιτθτϊν Σε 2 εβδομάδεσ κα κακοριςτοφν τα τελικά ποςοςτά των αςκιςεων, παρουςιάςεων, project και τυχόν εξετάςεων 4
Θζματα που κα καλφψουμε Οργάνωςθ και προγραμματιςμόσ ςυςτθμάτων κοινισ μνιμθσ Κφρια ζμφαςθ (πολυπφρθνα) Νιματα, OpenMP Οργάνωςθ και προγραμματιςμόσ ςυςτθμάτων κατανεμθμζνθσ μνιμθσ Δίκτυα διαςφνδεςθσ και clusters MPI και ίςωσ map-reduce Ρροχωρθμζνα κζματα (ανάλογα με το χρόνο / ενδιαφζροντα) Σφγχρονεσ τάςεισ (GPUs, accelerators, OpenCL) Αξιοπιςτία, κατανάλωςθ ενζργειασ Transactional memory 5
Ρροαπαιτοφμενα 1. Βαςικζσ γνϊςεισ ςτθν οργάνωςθ των υπολογιςτϊν Επεξεργαςτισ, μνιμθ, caches και ιεραρχία μνιμθσ κλπ. 2. Άνεςθ ςτον προγραμματιςμό Ρολφ καλι γνϊςθ και χριςθ τθσ C 3. Πρεξθ Αρκετι! 6
Το μάκθμα ςτο γενικότερο τοπίο 7
Το μάκθμα ςτο γενικότερο τοπίο 8
Προ-εισαγωγικά Pre-introductory
Τεχνολογία ο νόμοσ του Moore Moore s Law 2X transistors/chip Every 1.5 years Called Moore s Law Microprocessors have become smaller, denser, and more powerful. Τι ςημαίνει αυτό; Απάντηςη: πολυπλοκότητα! 10
Ο νόμοσ του Bill Joy τισ επιδόςεισ Σι ζγινε εδώ;;; Based on integer SPEC benchmarks Επιδόςεισ εκκετικά αυξανόμενεσ 11
Ρυκνότθτα ιςχφοσ 12
Ρρόςφατο παρελκόν SMPs (symmetric multiprocessors) 2 4 επεξεργαςτζσ (μονοπφρθνοι) ςυνθκιςμζνοι, μζχρι 8 επεξεργαςτζσ ςε εμπορικά ςυςτιματα Ρανάκριβα ςυςτιματα με 12-16 επεξεργαςτζσ ελάχιςτα Κοινι μνιμθ Τμιμα Ρλθροφορικισ: Ρολλά Sun με 2 UltraSparc Ρολλά PC με 2 Pentium / Athlon και με διπφρθνουσ επεξεργαςτζσ atlantis με 4 Pentium III Xeon (700MHz) 700.000 δρχ/cpu! paraguay με 4 x Intel Xeon 7000 Paxville @ 3GHz 2 cores per CPU / 2 threads per core (hyperthreaded) Δωρεά τθσ Intel USA ςτο PARAGROUP (2008) paragon με 2 x AMD Opteron 6166 @ 2GHz 12 cores per CPU Custom-made by the 13
Dual core / Quad core / Multicore / Manycore? Ρλζον και τα φτθνότερα PC ζχουν 1 επεξεργαςτι τουλάχιςτον διπφρθνο Το κινθτό μου είναι 6-πφρθνο Διπφρθνοι αρχικά, τϊρα 4/6/8/12πφρθνοι, (Intel, AMD) Τ1 (Sun Niagara): 8πφρθνοι (με 4-way multithreaded πυρινεσ) από τον 12/2005! T3 (2010): 16πφρθνοι, 8-way multithreaded Ρολλαπλϊν πυρινων (multicore) γενικά Manycore (πολλϊν πυρινων)?? Μιλάμε για πολλοφσ πυρήνεσ Τριψιφιο νοφμερο (> 64) Ρότε? Intel: Εδϊ και 5 χρόνια περίπου! Intel Xeon Phi (>60 cores) 14
Λεπτομζρεια (I) Intel Xeon Phi: Δεκ. 2012 ~60 cores (~5.000.000.000 transistors) network-on-a-chip τφπου δακτυλίου Ωσ κάρτα επζκταςθσ, από 1700$. 15
Λεπτομζρεια (ΙΙ) 16
Clusters Ραντοφ κι αυτά! Συλλογι από διαςυνδεδεμζνουσ «κόμβουσ» Φτθνοί / ευρζωσ διακζςιμοι επεξεργαςτζσ (π.χ. clusters από PCs) Ο μόνοσ τρόποσ να φτιάξουμε «οικονομικοφσ» υπερ-υπολογιςτζσ (πολλά Teraflops) Ραράδειγμα: Sandia Laboratories Red Storm (Cray, 2004) 13000 AMD Opterons (basically PC nodes), 75 Terabytes of memory > 100 Teraflops (peak) Linux Κόςτοσ: $90.000.000 Σε αντιδιαςτολι με τον Earth Simulator ( NEC, Ιαπωνία, 2002) Διανυςματικόσ υπερυπολογιςτισ 5120 διανυςματικοί επεξεργαςτζσ, 10 Terabytes of memory 35 Teraflops (sustained) Κόςτοσ: $400.000.000 (2002, most expensive computer ever built) 17
Λεπτομζρεια: Top500, Θζςθ #2 Tianhe-2 National Supercomputing Center (China) 16000 κόμβοι, ο κακζνασ με 2 επεξεργαςτζσ Xeon και 3 κάρτεσ Xeon Phi, και 2x32 + 3x8 = 88 GiB memory ςε κάκε κόμβο Σφνολο: 3.120.000 πυρινεσ 34 PFlops ~ 18 MW + 6 MW για ψφξθ Κόςτοσ: ~ $390.000.000 18
Λεπτομζρεια: Top500, Θζςθ #1 Sunway TaihuLight National Research Center of Parallel Computer Engineering & Technology (China) ~40.000 επεξεργαςτζσ (SW26010), ο κακζνασ με 260 πυρήνεσ επεξεργαςτζσ Xeon και 3 κάρτεσ Xeon Phi, και 2x32 + 3x8 = 88 GiB memory ςε κάκε κόμβο Σφνολο: > 10.000.000 πυρήνεσ > 1.3 Pbytes κφρια μνήμη 20 Pbytes storage 93 PFlops ~ 15 MW Κόςτοσ: ~ $273.000.000 19
Clusters Ρανεπιςτιμιο Ιωαννίνων Κζντρο προςομοιϊςεων: 200 κόμβοι (κάκε κόμβοσ pc με 2 επεξεργαςτζσ, αιωνία του η μνήμη ) Τμιμα Ρλθροφορικισ: 16 κόμβοι, κάκε κόμβοσ 2 CPUS, κάκε CPU διπφρθνθ. Εν αναμονι νζου ςυςτιματοσ Και τα δφο με gigabit ethernet Βελτιωμζνεσ επιδόςεισ με δίκτυα χαμθλισ κακυςτζρθςθσ Ρ.χ. Myrinet, Infiniband Ρολφ ακριβότερα όμωσ Κάρτα δικτφο gigabit: 10-20 Κάρτα infinband ~800, 16-port switch ~ 8000 Το μζλλον: Clusters από πολυπφρθνουσ κόμβουσ 20
GPUs, GPGPUs, Cells, κλπ. Ράρα πολλά και πολφ απλά επεξεργαςτικά ςτοιχεία, κατάλλθλα είτε για ςυγκεκριμζνου τφπου υπολογιςμοφσ (GPUs) είτε και για γενικότερουσ υπολογιςμοφσ (GPGPUs, Cell). Ρολφ «τθσ μόδασ» Ρολφ γριγορα «Ιδιαίτεροσ» προγραμματιςμόσ Διαχείριςθ μνιμθσ με το «χζρι» Με μία λζξθ: Ετερογζνεια Κλαςικόσ ιςχυρόσ πυρινασ/πυρινεσ + «ειδικοί» (γριγοροι, πολφ αλλά απλοί/ανίςχυροι) πυρινεσ Ετερογζνεια και ςτον τρόπο προγραμματιςμοφ 21
Mobile Ρολυπφρθνεσ είναι πλζον ακόμα και οι μικρότερεσ ςυςκευζσ. Ρ.χ. κινθτά τθλζφωνα (2/2018): Octa core (65 ) (τα quad core ουςιαςτικά δεν είναι φκθνότερα, ενϊ τα dual core πλζον είναι δυςεφρετα) 22
Embedded Και ςυςκευζσ για ενςωματωμζνα ςυςτιματα. Ρ.χ. parallella: SDcard HDMI 16-core (Epiphany, mesh) 2-core (ARM, Linux) USB Ethernet 100!! (δωρεά ςτο ppg) Ζχουμε ςτθν κατοχι μασ και το 64-core!!! 23
3 απλζσ ερωτιςεισ Το excel κα τρζξει γρθγορότερα ςε αυτά τα μθχανιματα; Πχι! Αν είχα ζνα από αυτά τα μθχανιματα ςπίτι μου (ωσ PC), κα ζβλεπα μεγαλφτερθ ταχφτθτα; Ναι, κάποια (μικρι ςχετικά) βελτίωςθ ςτθν ταχφτθτα κα υπιρχε Γιατί όμωσ; ManyCore refers to many processors/chip 64? 128? Hard to say exact boundary How to program these? Use 2 CPUs for video/audio Use 1 for word processor, 1 for browser 76 for virus checking??? Parallelism must be exploited at all levels Ρρζπει θ εφαρμογή να ζχει προγραμματιςτεί παράλληλα ώςτε να χρηςιμοποιεί τουσ πολλαπλοφσ επεξεργαςτζσ 24
Ρρογραμματιςμόσ Ρρζπει να μάκω νζεσ γλϊςςεσ προγραμματιςμοφ; ΥΡΑΧΟΥΝ ιδιαίτερεσ γλϊςςεσ προγραμματιςμοφ, όντωσ. Στθν πράξθ όμωσ ςυνεχίηουμε και χρθςιμοποιοφμε τισ γνωςτζσ γλϊςςεσ (C, C++, Fortran) Είτε με επιπλζον «εντολζσ»/οδθγίεσ είτε με νζεσ βιβλιοκικεσ (κλιςεισ ςυναρτιςεων) Διαφζρει από τον κλαςικό ςειριακό προγραμματιςμό; Σίγουρα το πρόγραμμα δομείται διαφορετικά Σπάει ςε «κομμάτια» όπου το κακζνα το εκτελεί άλλοσ επεξεργαςτισ Εξαρτάται από τθν οργάνωςθ του παράλλθλου ςυςτιματοσ Τι κα μάκω; Κατ ελάχιςτον: Νιματα, OpenMP, MPI Ανάλογα με τα ενδιαφζροντα, κάποια από OpenCL CUDA, ι υψθλότερου επιπζδου μοντζλα (π.χ. Map-reduce) 25
Σύντομη εισαγωγή στην κοινόχρηστη μνήμη Short intro to shared memory
«Οντότθτεσ» εκτζλεςθσ κϊδικα Σειριακό πρόγραμμα για υπολογιςμό του π = 3.141592 #define N 512 float pi = 0.0, W = 1.0/Ν; main() { } int i; for (i = 0; i < N; i++) pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); printf( π = %f\n, pi); Πταν φορτωκεί και εκτελείται το πρόγραμμα γίνεται διεργαςία (process). Κάκε διεργαςία εκτελείται ςε ζναν επεξεργαςτι Το λειτουργικό ςφςτθμα φροντίηει για αυτό 27
Διεργαςίεσ & νιματα Μία διεργαςία αποτελείται (κατ ελάχιςτο) από δεδομζνα, κϊδικα (εντολζσ), μία ςτοίβα (stack) και ζναν μετρθτι προγράμματοσ (program counter) Ο μετρθτισ προγράμματοσ (PC): δείχνει ςτθν επόμενθ εντολι του κϊδικα που κα εκτελεςτεί Η ςτοίβα χρειάηεται για: αποκικευςθ των τοπικϊν μεταβλθτϊν (τα «δεδομζνα» τθσ διεργαςίασ που είπαμε παραπάνω είναι οι global μεταβλθτζσ) #define N 512 float pi = 0.0, W = 1.0/Ν; main() { } int i; for (i = 0; i < N; i++) pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); printf( π = %f\n, pi); Ο ςυνδυαςμόσ PC + ςτοίβα λζγεται νήμα εκτζλεςησ (thread) Δθλαδι θ διεργαςία αποτελείται από (global) δεδομζνα, από κϊδικα και από ζνα νιμα εκτζλεςθσ που περνάει από τισ εντολζσ του κϊδικα Το νιμα είναι αυτό που εκτελείται όταν λζμε ότι εκτελείται θ διεργαςία! Το νιμα αυτό λζγεται αρχικό νήμα τθσ διεργαςίασ 28
Διεργαςίεσ & νιματα Μία διεργαςία μπορεί να δθμιουργιςει κι άλλα πολλά νιματα εκτζλεςθσ: Δθμιουργϊντασ τίποτε άλλο εκτόσ από πολλζσ ςτοίβεσ και PCs Πλα κα τρζχουν εντολζσ από τον ίδιο κϊδικα (δεν δθμιουργείται άλλο αντίγραφό του) και τζλοσ Πλα κα ζχουν τα ίδια global δεδομζνα! Δθλαδι οι κακολικζσ μεταβλθτζσ τθσ διεργαςίασ είναι ΑΥΤΟΜΑΤΩΣ ΚΟΙΝΕΣ μεταξφ των νθμάτων τθσ. Στθν κάκε ςτοίβα το κάκε νιμα κα ζχει τισ δικζσ του τοπικζσ μεταβλθτζσ Κάκε νιμα εκτελείται ςε ζναν επεξεργαςτι Το λειτουργικό ςφςτθμα φροντίηει για αυτό (εκτόσ από μερικζσ περιπτϊςεισ) 29
Ραράλλθλα προγράμματα Επομζνωσ, για να εκμεταλλευτοφμε πολλαπλοφσ επεξεργαςτζσ, ζχουμε δφο βαςικζσ τεχνικζσ: Πολλαπλζσ διεργαςίεσ Η διεργαςία μασ «γεννά» κι άλλεσ διεργαςίεσ και κάκε μία εκτελείται ςτον δικό τθσ επεξεργαςτι (π.χ. fork()) Πολλαπλά νήματα ςε μία διεργαςία Το αρχικό νιμα εκτζλεςθσ «γεννά» κι άλλα νιματα και κάκε ζνα εκτελείται ςτον δικό του επεξεργαςτι Υπάρχουν διαφορζσ ςε ταχφτθτα δθμιουργίασ, απαιτιςεισ ςε πόρουσ (π.χ. μνιμθ) κλπ αλλά θ πιο ςθμαντικι διαφορά είναι ότι: Ανάμεςα ςτισ πολλαπλζσ διεργαςίεσ ΔΕΝ ΥΠΑΡΧΕΙ καμία κοινή μεταβλητή. Ρρζπει να δθμιουργθκοφν «με το χζρι», ενϊ μεταξφ των πολλαπλϊν νθμάτων όλεσ οι global μεταβλθτζσ είναι κοινζσ είτε το κζλουμε είτε όχι. 30
Υλικό που κα εκτελζςει το παράλλθλο πρόγραμμα Κάκε οντότθτα εκτζλεςθσ (νιμα ι διεργαςία) κα εκτελείται ςε ζναν επεξεργαςτι, όπου «επεξεργαςτισ» είναι ότι το λειτουργικό ςφςτθμα κεωρεί επεξεργαςτι! Ρριν 3-4 χρόνια, ιταν μια CPU (μονοπφρθνθ) Ρλζον είναι 1 πυρινασ από τθν CPU (γενικά, ζνα αυτόνομο επεξεργαςτικό ςτοιχείο) Σε πολυνθματικοφσ επεξεργαςτζσ (π.χ. Intel hyperthreading), κάκε ζνα από τα hardware threads παρουςιάηεται ςτο λειτουργικό ςφςτθμα ότι είναι διαφορετικόσ «επεξεργαςτισ» Οι πολυνθματικοί επεξεργαςτζσ εκτελοφν 1 διεργαςία (ι νιμα) τθ φορά αλλά όταν βρίςκουν ελεφκερο χρόνο μποροφν να εκτελζςουν για λίγο εντολζσ από άλλθ διεργαςία (ι νιμα). Εκμεταλλεφονται κενοφσ κφκλουσ, αλλά αν υποςτθρίηουν Ν hardware threads, δεν ζχουν προφανϊσ τισ επιδόςεισ Ν ανεξάρτθτων cores. 31
Οργάνωςθ των επεξεργαςτϊν - SMPs SMPs Symmetric Multiprocessors Bus-based με όλουσ τουσ επεξεργαςτζσ επάνω ςε ζναν δίαυλο ςτον οποίο βρίςκεται και θ κφρια μνιμθ Πλοι προςπελαφνουν τθν ίδια μνιμθ (κοινόχρθςτθ) 32
SMPs Οικονομικι λφςθ, επιτυχθμζνα εμπορικά Λίγοι επεξεργαςτζσ (ζωσ 10+, το πολφ) Ο δίαυλοσ είναι το bottleneck Γενικά, οι επεξεργαςτζσ όλοι βλζπουν και απευκφνονται ςτθ κφρια μνιμθ ςαν να είναι ενιαία και εξ ολοκλιρου προςπελάςιμθ UMA (= Uniform Memory Access) Πλοι αντιλαμβάνονται τθν ίδια κακυςτζρθςθ ςτθν προςπζλαςθ οποιουδιποτε δεδομζνου 33
Switch-based διαςφνδεςθ Αντί για δίαυλοσ, διακοπτικό δίκτυο crossbar (Sun Enterprise E10000, Earth Simulator) Άλλα δίκτυα (π.χ. πεταλοφδασ, clos κλπ) UMA Καλφτερθ κλιμακωςιμότθτα, ακριβό 34
Ανομοιόμορφθ προςπζλαςθ Για μεγάλθ κλιμακωςιμότθτα: ιδιωτική μνήμη ςε κάθε επεξεργαςτή Θα πρζπει οι επεξεργαςτζσ να ςυνδζονται μεταξφ τουσ για να μποροφν να προςπελάςουν ο ζνασ τθ μνιμθ του άλλου Ρϊσ κα νομίςουν όλοι ότι θ μνιμθ είναι ενιαία, ενϊ ο κακζνασ ζχει μόνο ζνα κομμάτι τθσ; Χρειάηεται ειδικόσ ελεγκτισ ο οποίοσ ξεχωρίηει τισ προςπελάςεισ για τα τοπικά δεδομζνα και τα απομακρυςμζνα. Στθ δεφτερθ περίπτωςθ πάει και τα φζρνει από τθν μνιμθ άλλου επεξεργαςτι. Επομζνωσ, υπάρχει ανομοιόμορφη προςπζλαςη τησ μνήμησ Ταχφτατα για δεδομζνα που τυχαίνουν να είναι ςτθν τοπικι μνιμθ Με κακυςτζρθςθ αν βρίςκονται ςτθ μνιμθ κάποιου άλλου NUMA (= Non-Uniform Memory Access) 35
Ραράδειγμα: AMD Opterons και hypertransport NUMA factor: Ρόςο (κατά μζςο όρο) πιο αργι είναι θ προςπζλαςθ μνιμθσ άλλου επεξεργαςτι απ ότι τθσ τοπικισ μνιμθσ Σε ςυςτιματα με opterons είναι περίπου 1.3 1.5. Opteron 8347HE (1,9GHz) 36
Τα multicore τι είναι; Μζχρι τϊρα είναι παρόμοια με τα SMP μιασ και είναι πολλαπλά cores που προςπελαφνουν μία κοινι μνιμθ Αν και κυμίηουν SMPs, ανάλογα με το πϊσ διαμοιράηονται τισ caches, πάνε όλο και πιο πολφ προσ NUMA! Ρ.χ. Intel Xeon 5450 (quad core) Ανά δφο οι πυρινεσ ζχουν κοινι cache δευτζρου επιπζδου Άρα αν κάτι το πετφχουν εκεί, το παίρνουν πολφ γριγορα Αλλιϊσ πάνε ςτθν κφρια μνιμθ (που είναι πολφ αργι) Τα manycore κα είναι ΝUMA 99,999% «Βακιζσ» ιεραρχίεσ cache Συνολικι cache μικρότερθ από SMPs (υπάρχει μοίραςμα ανάμεςα ςτα cores) Θα ςτοιχίηει πολφ το cache miss 37
Θζματα που ζχουν επίπτωςθ ςτισ επιδόςεισ των προγραμμάτων SMPs & caches Coherency (ςυνοχι) False sharing NUMA & caches ccnuma & directory-based coherency (ςυνοχι με καταλόγουσ) Ρωσ το NUMA factor επθρεάηει τισ επιδόςεισ 38
Cache Απαραίτητη μιασ και εξοικονομεί πολφ χρόνο Ρολφ γρθγορότερθ από τθν κφρια μνιμθ Ρολφ μικρότερθ από τθν κφρια μνιμθ Πτι δεδομζνο χρθςιμοποιιςει θ διεργαςία μασ (δθλαδι ο επεξεργαςτισ), Το φζρνει και το φυλάει Φζρνει και τα γειτονικά του δεδομζνα (φζρνει ζνα ολόκλθρο μπλοκ μνιμθσ) Εφόςον το πρόγραμμα ζχει τοπικότητα (δθλαδι χρθςιμοποιεί ςχετικά λίγα και γειτονικά δεδομζνα για αρκετι ϊρα), ζχουμε πολφ μεγάλθ βελτίωςθ ςτθν ταχφτθτα προςπζλαςθσ των δεδομζνων. 39
Ρϊσ να καταςτρζψετε τθν cache for (i = 0; i < 10000; i++) for (j = 0; j < 10000; j++) a[i][j] = 2*b[i][j]; for (j = 0; j < 10000; j++) for (i = 0; i < 10000; i++) a[i][j] = 2*b[i][j]; Χρόνοσ εκτζλεςθσ ςτο (παλαιότερο) φορθτό μου: 1.2 sec Χρόνοσ εκτζλεςθσ ςτο (παλαιότερο) φορθτό μου: 14 sec 40
Cache coherency X = global μεταβλθτι και δφο νιματα τθσ διεργαςίασ εκτελοφνται ςτουσ επεξεργαςτζσ 1 και 2 Χ Χ Τι γίνεται αν το νιμα 1 αλλάξει το Χ (π.χ. κάνει Χ = Χ+1); Χ 41
Cache coherency ΙΙ Αυτό είναι το πρόβλθμα τθσ ςυνοχισ τθσ cache Ρρζπει όλεσ οι caches και θ κφρια μνιμθ να είναι ενθμερωμζνεσ με τισ πιο πρόςφατεσ τιμζσ των δεομζνων που ζχουν Το πρόβλθμα ςτουσ SMPs λφνεται με ειδικά πρωτόκολλα ςτο hardware, π.χ. MESI (Intel), MOESI (AMD, Sparc). Τροποποιιςεισ ςε μία cache ακυρώνουν τυχόν αντίγραφο του δεδομζνου ςε μία άλλθ Οι τροποποιιςεισ και ακυρϊςεισ δθμιουργοφν αρκετι κίνθςθ ςτο δίαυλο Τα πρωτόκολλα λειτουργοφν παρακολουκϊντασ ΤΑ ΡΑΝΤΑ ΡΟΥ ΣΥΜΒΑΙΝΟΥΝ ΣΤΟΝ ΔΙΑΥΛΟ, ΑΡΟ ΟΡΟΙΟΝ ΕΡΕΞΕ ΓΑΣΤΗ ΚΑΙ ΝΑ Ρ ΟΕ ΧΟΝΤΑΙ. ΠΡΟΓΡΑΜΜΑΣΙ ΣΙΚΟ ΔΙΔΑΓΜΑ: οι κοινζσ μεταβλητζσ που τροποποιοφνται ςυχνά και από διαφορετικά νήματα προκαλοφν υψηλή κίνηςη ςτον δίαυλο και επιφζρουν μεγάλεσ καθυςτερήςεισ. Τα πρωτόκολλα προςπακοφν να μειϊςουν τθν κίνθςθ ςτο ελάχιςτο, όμωσ ζνα απρόςεκτο πρόγραμμα μπορεί να καταςτρζψει το όποιο όφελοσ. 42
NUMA & ςυνζπειεσ Πλοι οι επεξεργαςτζσ ζχουν caches. Τι γίνεται αν κάποια ςτιγμι ο επεξεργαςτισ φζρει ζνα δεδομζνο από ζναν άλλο επεξεργαςτι; Το δεδομζνο κα πάει ςτθν cache Το πρόβλθμα τθσ ςυνζπειασ πϊσ λφνεται ςε αυτι τθν περίπτωςθ (αφοφ δεν υπάρχει δίαυλοσ να «παρακολουκείται»); Δφο λφςεισ: ΑΡΑΓΟΕΥΕΤΑΙ τα απομακρυςμζνα δεδομζνα να μπαίνουν ςτθν cache (π.χ. Cray T3D) ι ΕΡΙΤΕΡΕΤΑΙ, αλλά επιπλζον χρθςιμοποιοφνται νζα πρωτόκολλα ςυνοχισ, βαςιςμζνα ςε καταλόγουσ (ccnuma cache coherent NUMA) Directory-based cache coherence 43
Τοποκζτθςθ δεδομζνων / νθμάτων Βαςικό μζλθμα το ποφ κα τοποκετθκοφν τα νιματα και ποφ τα δεδομζνα Αν τα δεδομζνα που χρθςιμοποιεί πιο ςυχνά ζνα νιμα πάνε ςε άλλον επεξεργαςτι από ότι το νιμα, τότε κα ζχουμε κακυςτεριςεισ (NUMA factor) Συνικθσ τακτικι ςτα λειτουργικά ςυςτιματα: First touch (όποιο νιμα προςπελάςει πρϊτο κάποιο δεδομζνο, τότε «τραβάει» το δεδομζνο αυτό ςτθν μνιμθ του επεξεργαςτι που το εκτελεί. Το δεδομζνο δεν μετακινείται από εκεί και πζρα). ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΟ ΔΙΔΑΓΜΑ??? Θζλει προςοχι ςτισ αρχικοποιήςεισ. Δεν μπορεί τισ αρχικοποιιςεισ να τισ κάνει μόνο ζνα νιμα!! 44
8 cores είναι τα ίδια;; 45
Ταχφτθτα προςπζλαςθσ τθσ μνιμθσ Κάκε επανάλθψθ κάνει μία ανάγνωςθ (load) και μία εγγραφι (store) ςτθν μνιμθ Ραραλλθλοποίθςθ με πολλά νιματα, το κακζνα δοφλευε μόνο ςτα δικά του δεδομζνα (δθλαδι κάκε νιμα προςπελαφνει διαφορετικζσ διευκφνςεισ δεν υπάρχουν ςυγκροφςεισ) Δοκιμζσ με διαφορετικζσ τοποκετιςεισ των νθμάτων 46
1 νιμα εκτελείται ςτο κάκε ςφςτθμα 47
2 x 4core Intel Xeon Scalability 48
4 x 2core AMD Opteron Scalability προςεκτικά όμωσ 49
1 x 8core Niagara T2 (με 8-way CMT ανά πυρινα) Scalability Πμωσ αργόσ για 1 νιμα 50