Πολυπύρηνοι επεξεργαστές Multicore processors 1
Μετάβαση στους πολυπύρηνους(1) Απόδοση των µονοεπεξεργαστών 25% ετήσια βελτίωση της απόδοσης από το 1978 έως το 1986 Κυρίως από την εξέλιξη της τεχνολογίας κατασκευής των επεξεργαστών 52% ετήσια βελτίωση της απόδοσης από το 1986 έως το 2003 Κυρίως από την εµφάνιση της αρχιτεκτονικής RISC 22% ετήσια βελτίωση της απόδοσης από το 2003 έως σήµερα Η απόδοση περιορίζεται από: Την κατανάλωση ισχύος (power wall) Τον περιορισµό στην παραλληλία επιπέδου εντολής (ILP wall) Τον λανθάνοντα χρόνο µνήµης (memory wall) 2
Μετάβαση στους πολυπύρηνους(2) 3
Intel Core i7 Πηγή: Intel 4
Ταξινόµηση υπολογιστών (Flynn) SISD - Single Instruction Single Data Μονοεπεξεργαστής MISD - Multiple Instructions Single Data εν υπάρχουν παραδείγµατα SIMD - Single Instruction Multiple Data Πολυεπεξεργαστής (π.χ. vector ή array processor) Παραλληλισµός επιπέδου δεδοµένων MIMD - Multiple Instructions Multiple Data Τυπικοί πολυεπεξεργαστές Χρησιµοποιείται πολυεπεξεργασία (multi-processing) ή πολυνηµάτωση (multi-threading) (παραλληλισµός σε επίπεδο νήµατος) 5
Είδη πολυεπεξεργαστών MIMD Commodity clusters (Συστοιχίες) Κατασκευάζονται από ευρέως διαδεδοµένα στοιχεία υλικού Μικρό κόστος Custom clusters Eιδικές υπολογιστικές πλατφόρµες Οι υπερυπολογιστές Πολυπύρηνοι επεξεργαστές (multi-cores) Πολλαπλοί επεξεργαστές (πυρήνες) σε ένα τσιπ Μοιράζονται κάποιους πόρους (π.χ. µνήµη cache) 6
Single-Chip Multiprocessors (Multicores) Πολυεπεξεργαστές κοινόχρηστης µνήµης Όλοι οι πυρήνες µοιράζονται µια κοινή µνήµη cache µέσα στο τσιπ Οµοιόµορφη προσπέλαση στη κοινόχρηστη cache και στη µνήµη Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 7
Πολυεπεξεργαστές κατανεµηµένης µνήµης Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 8
Είδη Παραλληλίας Παραλληλία σε επίπεδο διεργασίας ιεργασίες δροµολογούνται παράλληλα για να εκτελεστούν σε πολλαπλούς επεξεργαστές Παραλληλία σε επίπεδο νηµάτων (Threads) Ένα πρόγραµµα διασπάται σε πολλαπλά νήµατα Ενδείκνυται για πολυεπεξεργαστές κοινόχρηστης µνήµης Παραλληλία σε επίπεδο δεδοµένων Παραλληλία δεδοµένων µέσα σε µοναδικό νήµα Παραλληλία σε επίπεδο εντολής Εντολές εκτελούνται σε πολλαπλές λειτουργικές µονάδες (συναντάται σε επεξεργαστές superscalar) 9
Νήµατα (Threads) Ένα νήµα περιλαµβάνει ένα σύνολο εντολών. Αποτελεί την µικρότερη µονάδα που µπορεί να δροµολογηθεί από το λειτουργικό σύστηµα για να εκτελεστεί Ένα πρόγραµµα/διεργασία περιέχει ένα ή περισσότερα νήµατα, τα οποία µπορούν να εκτελεστούν παράλληλα Κάθε νήµα περιλαµβάνει: Ένα µετρητή προγράµµατος Ένα σύνολο καταχωρητών Μία στοίβα Ένα νήµα µοιράζεται µε άλλα νήµατα που ανήκουν στην ίδια διεργασία το τµήµα κώδικά του, το τµήµα δεδοµένων του 10
Multithreading (Πολυνηµάτωση) Πολυνηµάτωση: εκτελούνται πολλαπλά νήµατα Σε ένα µοναδικό επεξεργαστή η πολυνηµάτωση επιτυγχάνεται µε time division multiplexing: Ο επεξεργαστής εναλλάσσεται µεταξύ νηµάτων KME: Χρόνος thread1 thread2 thread3 Σε ένα πολυεπεξεργαστή η πολυνηµάτωση επιτυγχάνεται µε την εκτέλεση των νηµάτων την ίδια στιγµή, µε κάθε επεξεργαστή να εκτελεί και ένα νήµα 11
Hyper threading (Υπερνηµάτωση) Ένας πυρήνας (core) µε ενσωµατωµένη τεχνολογία hyper threading γίνεται αντιληπτός από το λειτουργικό σύστηµα ως δύο «λογικοί» πυρήνες Οι δύο λογικοί πυρήνες µοιράζονται φυσικές µονάδες επεξεργασίας Η υπερνηµάτωση απαιτεί την ύπαρξη λειτουργικού συστήµατος το οποίο όχι µόνο θα πρέπει να υποστηρίζει πολλαπλούς πυρήνες επεξεργασίας αλλά και να είναι ειδικά σχεδιασµένο να εκµεταλλεύεται τη τεχνολογία αυτή Ένας τετραπύρηνος επεξεργαστής µε τεχνολογία hyper threading εµφανίζεται στο λειτουργικό σύστηµα ως ένας οκταπύρηνος επεξεργαστής 12
Cache coherence problem Το πρόβληµα συνοχής των cache (cache coherence problem) δηµιουργείται από τις τοπικές cache που διαθέτει ο κάθε πυρήνας Αντίγραφα µιας κοινόχρηστης µεταβλητής µπορεί να υπάρχουν σε διαφορετικές cache και στην µνήµη Πώς συγχρονίζονται οι cache µεταξύ τους; Πώς και πότε ενηµερώνεται η κύρια µνήµη; Πώς ξέρουµε ότι αυτό που διαβάσαµε από την cache είναι σωστό; Μεταβλητή Χ στην μνήμη Cache του πυρήνα Α Cache του πυρήνα Β Cache του πυρήνα Γ Ο πυρήνας Α διαβάζει την Χ 2 2 Ο πυρήνας Β διαβάζει την Χ 2 2 2 Ο πυρήνας Α αποθηκεύει το 4 στην Χ 2 4 2 Ο πυρήνας Γ διαβάζει την Χ 2 4 2 2 13
Συνθήκες συνοχής µνήµης (1) Τα συστήµατα µνήµης διαθέτουν συνοχή αν: 1. Η ανάγνωση της θέσης Χ από τον επεξεργαστή P, η οποία ακολουθεί µία εγγραφή της θέσης Χ από τον P, χωρίς να πραγµατοποιείται καµία εγγραφή του Χ από κάποιον άλλο επεξεργαστή στο διάστηµα που µεσολαβεί µεταξύ της εγγραφής και της ανάγνωσης της Χ από τον P, επιστρέφει την τιµή που εγγράφηκε από τον P 2. Η ανάγνωση της θέσης Χ από κάποιον επεξεργαστή, η οποία ακολουθεί µία εγγραφή της θέσης Χ από κάποιον άλλο επεξεργαστή, επιστρέφει, σε περίπτωση που µεταξύ της ανάγνωσης και της εγγραφής µεσολαβεί επαρκής χρόνος και παράλληλα δεν πραγµατοποιείται καµία άλλη εγγραφή της θέσης Χ µεταξύ των δύο προσπελάσεων, την εγγεγραµµένη τιµή Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 14
Συνθήκες συνοχής µνήµης (2) Τα συστήµατα µνήµης διαθέτουν συνοχή αν: 3. Οι λειτουργίες εγγραφής της ίδιας θέσης είναι σειριοποιηµένες (serialized): ηλαδή, δύο λειτουργίες εγγραφής της ίδιας θέσης που έχουν πραγµατοποιηθεί από δύο οποιουσδήποτε επεξεργαστές γίνονται αντιληπτές µε την ίδια σειρά για όλους τους επεξεργαστές. Για παράδειγµα, αν οι τιµές 1 και 2 εγγραφούν σε κάποια θέση, τότε οι επεξεργαστές δεν µπορούν ποτέ να διαβάσουν αρχικά την τιµή της θέσης όταν αυτή ισούται µε 2 και στη συνέχεια να διαβάσουν την τιµή 1 Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 15
Πρωτόκολλα Cache Coherence Τα πρωτόκολλα διατήρησης της συνοχής των πολυεπεξεργαστών ονοµάζονται πρωτόκολλα συνοχής της µνήµης cache (cache coherence protocols) ύο κατηγορίες: Snooping (κατασκοπίας) Κάθε cache διαθέτει πληροφορίες για όλα τα block της κύριας µνήµης που κατέχει, σχετικά µε την κατάσταση κοινής χρήσης των block Κάθε cache παρακολουθεί ένα δίαυλο (bus) για να προσδιορίσει αν έχει ή όχι ένα αντίγραφο κάποιου block που ζητείται Βασιζόµενα σε κατάλογο (directory based) Η πληροφορία για τα κοινόχρηστα block διατηρείται κάπου κεντρικά, σε έναν κατάλογο 16
Πρωτόκολλα κατασκοπίας Εγγραφής και ακύρωσης (write invalidate) Όταν ένας πυρήνας πραγµατοποιεί µια εγγραφή σε κάποιο block, πρέπει να έχει την αποκλειστική πρόσβαση σε αυτό Εξασφαλίζεται µε την ακύρωση όλων των αντιγράφων του block που βρίσκονται σε άλλες cache. Αυτό γίνεται µε την αποστολή σχετικού µηνύµατος µέσω του κοινού διαύλου επικοινωνίας Σε περίπτωση ταυτόχρονης εγγραφής των ίδιων δεδοµένων από δύο πυρήνες, ο ένας κερδίζει τον ανταγωνισµό Εγγραφής και ενηµέρωσης (write update) Όταν ένας πυρήνας πραγµατοποιεί µια εγγραφή σε κάποιο block, ενηµερώνει και όλα τα αντίγραφα του block που βρίσκονται σε άλλες cache Απαιτείται υψηλό εύρος ζώνης αφού εκπέµπονται όλες οι λειτουργίες εγγραφής ε χρησιµοποιείται στους σύγχρονους πολυεπεξεργαστές 17
Πρωτόκολλο εγγραφής και ακύρωσης Ο πυρήνας που πρόκειται να κάνει εγγραφή αποκτά πρόσβαση στον κοινό δίαυλο επικοινωνίας και εκπέµπει τη διεύθυνση που πρόκειται να εγγραφεί µε σκοπό να ακυρωθεί από όσους κατέχουν αντίγραφο Όλοι οι πυρήνες κατασκοπεύουν το δίαυλο παρακολουθώντας τις διευθύνσεις που εκπέµπονται Αν η διεύθυνση που εκπέµπεται βρίσκεται και στην τοπική τους cache τα αντίστοιχα δεδοµένα ακυρώνονται Αν δοκιµάσουν να γράψουν σε κοινόχρηστα block δύο πυρήνες ταυτόχρονα, οι προσπάθειές τους να εκπέµψουν µια ακυρωτική λειτουργία θα µπουν σε σειρά όταν αποκτήσουν την κυριότητα του διαύλου 18
Τι γίνεται σε περίπτωση αστοχίας στην cache (ανάγνωση); Write through caches: Ο εντοπισµός µιας πρόσφατης τιµής ενός στοιχείου δεδοµένων είναι εύκολος αφού, το πρόσφατο τροποποιηµένο block βρίσκεται ταυτόχρονα και στη cache και στη µνήµη Write back caches: Ο εντοπισµός µιας πρόσφατης τιµής ενός στοιχείου δεδοµένων είναι πιο δύσκολος αφού, το πρόσφατο τροποποιηµένο block µπορεί να βρίσκεται µόνο στη cache και όχι και στη µνήµη. Αυτές οι cache παρακολουθούν το δίαυλο και εάν διαπιστώσουν ότι διαθέτουν κάποιο τροποποιηµένο αντίγραφο που ζητείται, τότε παρέχουν αυτό το block και διακόπτεται η περαιτέρω πρόσβαση στη µνήµη Επειδή δεν απαιτούν υψηλό εύρος ζώνης µπορούν να υποστηρίξουν περισσότερους και ταχύτερους επεξεργαστές. Αποτελούν την προσέγγιση που χρησιµοποιείται σήµερα Οι ετικέτες των cache µπορούν να χρησιµοποιηθούν για τη διαδικασία της κατασκοπείας, ενώ το έγκυρο bit (valid bit) κάθε block χρησιµοποιείται για τη διαδικασία της ακύρωσης 19
Υλοποίηση πρωτοκόλλου Κάθε cache περιλαµβάνει έναν ελεγκτή, ο ποίος εκτελεί το πρωτόκολλο συνάφειας έχεται αιτήσεις από τον επεξεργαστή για πρόσβαση στη µνήµη «Κατασκοπεύει» όλες τις «κινήσεις» (transactions) που συµβαίνουν στο κοινόχρηστο µέσο επικοινωνίας (bus ή switch) Μία «κίνηση» είναι σχετική, εάν η διεύθυνσή της συµπίπτει µε κάποια ετικέτα που βρίσκεται στην cache Για κάθε block στην cache λειτουργεί µια µηχανή πεπερασµένων καταστάσεων (Finite State Machine-FSM), όπου η µετάβαση από µια κατάσταση σε κάποιαν άλλη προκαλείται από συγκεκριµένο αίτιο και προκαλεί συγκεκριµένες δράσεις 20
MSI πρωτόκολλο εγγραφής και ακύρωσης Το πρωτόκολλο MSI αποτελεί το ακρωνύµιο των τριών καταστάσεων στις οποίες µπορεί να βρεθεί ένα block στην cache Κάθε block σε µια cache µπορεί να βρίσκεται σε µία από τρεις καταστάσεις: M(modified) Τροποποιηµένο (Exclusive-αποκλειστικό): έχει τροποποιηθεί εντός της cache που βρίσκεται και είναι διαφορετικό από το αντίγραφο που βρίσκεται στην µνήµη. Η cache το στέλνει σε όποιον το ζητήσει για ανάγνωση ή εγγραφή και ενηµερώνει το αντίγραφο στην µνήµη σε περίπτωση αντικατάστασης. Η κατάσταση αυτή υπαινίσσεται ότι το block είναι αποκλειστικό S(shared)-µοιραζόµενο: µοιράζεται (δηλ. είναι το ίδιο) µε άλλα αντίγραφά του που βρίσκονται στην µνήµη ή σε άλλες cache I(invalid)- Άκυρο: δεν περιέχει έγκυρα δεδοµένα και αν χρειαστεί από την cache θα πρέπει να διαβαστεί από την µνήµη ή από άλλη cache 21
Αιτήµατα από τη CPU και από το δίαυλο Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 22
ιάγραµµα µετάβασης καταστάσεων Με κανονική γραφή: το αίτιο της µετάβασης σε άλλη κατάσταση Με έντονη γραφή: ενέργειες του διαύλου ως αποτέλεσµα της αλλαγής κατάστασης Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 23
Παράδειγµα(1) 1. To block Α, που περιέχει την µεταβλητή Χ, βρίσκεται στην κατάσταση Invalid στην cache της CPU_1. Η CPU_1 διαβάζει την µεταβλητή Χ: Στέλνει στον δίαυλο το αίτηµα read miss και διαβάζει το block A από τη µνήµη (ή από άλλη cache). Το block Α αλλάζει σε κατάσταση Shared 2. Η CPU_1 διαβάζει την µεταβλητή Χ. Έχουµε Read hit (το block στην κατάσταση Shared είναι το ίδιο µε άλλα αντίγραφά του που βρίσκονται στην µνήµη ή σε άλλες cache) και το block Χ παραµένει στην κατάσταση Shared 3. Η CPU_2 διαβάζει την µεταβλητή Χ: Στέλνει στον δίαυλο το αίτηµα read miss και διαβάζει το block A από τη µνήµη (ή από άλλη cache). Το block Α στην cache της CPU_2 βρίσκεται στην κατάσταση Shared Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 24
Παράδειγµα(2) 4. Η CPU_1 γράφει στη µεταβλητή Χ: τοποθετεί το αίτηµα write miss στον δίαυλο και το block A αλλάζει σε κατάσταση exclusive ( modified ) 5. Η CPU_2, χρησιµοποιώντας το διάγραµµα του διαύλου, διαβάζει το αίτηµα write miss και αλλάζει το block A που βρίσκεται στην τοπική της cache σε κατάσταση Invalid 6. Η CPU_1 γράφοντας ή διαβάζοντας την µεταβλητή Χ, παραµένει (το block A) στην κατάσταση exclusive ( modified ) 7. Η CPU_2 διαβάζει την µεταβλητή Χ: τοποθετεί στον δίαυλο το αίτηµα read miss. H CPU_1, χρησιµοποιώντας το διάγραµµα του διαύλου, παρέχει το σωστό block A στην CPU_2 και αλλάζει σε κατάσταση Shared. H CPU_2 αλλάζει σε κατάσταση Shared Πηγή: D. Patterson & J. Hennessy: Computer Architecture, 5 th Edition 25
Παράδειγµα πρωτοκόλλου MSI(1) Πυρήνας1 Πυρήνας2 Πυρήνας3 Cache X=10 S Cache Cache BusRead Bus ΜΝΗΜΗ X=10 Ενέργειες πυρήνα Π1 διαβάζειx Κατά/ση Π1 Shared Κατά/ση Π2 --- Κατά/ση Π3 --- Κίνηση στο δίαυλο BusRead Πηγή δεδοµένων Μνήμη 26
Παράδειγµα πρωτοκόλλου MSI(2) Πυρήνας1 Πυρήνας2 Πυρήνας3 Cache Cache Cache X=10 S X=10 S BusRead Bus ΜΝΗΜΗ X=10 Ενέργειες πυρήνα Π1 διαβάζειx Π3 διαβάζειx Κατά/ση Π1 Shared Shared Κατά/ση Π2 --- --- Κατά/ση Π3 --- Shared Κίνηση στο δίαυλο BusRead BusRead Πηγή δεδοµένων Μνήμη Μνήμη 27
Παράδειγµα πρωτοκόλλου MSI(3) Πυρήνας1 Πυρήνας2 Πυρήνας3 Cache Cache Cache ---- I X=-25 M BusReadX Bus ΜΝΗΜΗ X=10 Ενέργειες πυρήνα Π1 διαβάζειx Π3 διαβάζειx Π3 γράφειx Κατά/ση Π1 Shared Shared Invalid Κατά/ση Π2 --- --- --- Κατά/ση Π3 --- Shared Modified Κίνηση στο δίαυλο BusRead BusRead BusReadX Πηγή δεδοµένων Μνήμη Μνήμη Μνήμη 28
Παράδειγµα πρωτοκόλλου MSI(4) Πυρήνας1 Πυρήνας2 Πυρήνας3 Cache Cache Cache X=-25 S X=-25 S BusRead Bus ΜΝΗΜΗ X=-25 Ενέργειες πυρήνα Π1 διαβάζειx Π3 διαβάζειx Π3 γράφειx Π1 διαβάζειx Κατά/ση Π1 Shared Shared Invalid Shared Κατά/ση Π2 --- --- --- --- Κατά/ση Π3 --- Shared Modified Shared Κίνηση στο δίαυλο BusRead BusRead BusReadX BusRead Πηγή δεδοµένων Μνήμη Μνήμη Μνήμη Π3 cache 29
Παράδειγµα πρωτοκόλλου MSI(5) Πυρήνας1 Πυρήνας2 Πυρήνας3 Cache Cache Cache X=-25 S X=-25 S X=-25 S BusRead Bus ΜΝΗΜΗ X=-25 Κατά/ση Π1 Κατά/ση Π2 Κατά/ση Π3 Κίνηση στο δίαυλο Πηγή δεδοµένων Ενέργειες πυρήνα Π1 διαβάζειx Shared --- --- BusRead Μνήμη Π3 διαβάζειx Shared --- Shared BusRead Μνήμη --- Π3 γράφειx Invalid Modified BusReadX Μνήμη Π1 διαβάζειx Shared --- Shared BusRead Π3 cache Π2 διαβάζειx Shared Shared Shared BusRead Μνήμη 30