Γιώργος Δημητρίου Ενότητα 3 η : Παράλληλη Επεξεργασία
Παράλληλες Αρχιτεκτονικές Παράλληλο σύστημα είναι ένα σύνολο από επεξεργαστικά στοιχεία (processing elements) τα οποία: συνεργάζονται για γρήγορη επίλυση προβλημάτων Άρα το βασικό αντικείμενο μελέτης για την παράλληλη επεξεργασία είναι η ταχύτητα Και η επίλυσή του είναι η χρήση πολλαπλών συνεργαζόμενων στοιχείων
Ταξινόμηση Flynn SISD (Single Instruction - Single Data) Οι μονοεπεξεργαστές SIMD (Single Instruction - Multiple Data) Οι διανυσματικοί επεξεργαστές MISD (Multiple Instruction - Single Data) Μηχανές ροής δεδομένων MIMD (Multiple Instruction - Multiple Data) Οι συνηθισμένοι παράλληλοι επεξεργαστές (πχ. πολυνηματικοί, πολυπύρηνοι)
Επιτάχυνση (Speedup) Χρησιμοποιούμε παράλληλα συστήματα για να επιτύχουμε επιτάχυνση στην εκτέλεση μιας εφαρμογής: Speedup p επεξεργαστές = Χρόνος εκτέλεσης σε 1 επεξεργαστή Χρόνος εκτέλεσης σεp επεξεργαστές
Μη Γραμμική Επιτάχυνση Αρκετοί παράγοντες εμποδίζουν την επιτάχυνση χρήσης p επεξεργαστών να είναι ίση με p: Η επικοινωνία των επεξεργαστών με τη μνήμη Η επικοινωνία των επεξεργαστών μεταξύ τους Η κατανομή φορτίου εργασίας στους επεξεργαστές Μπορεί ποτέ η επιτάχυνση να είναι μεγαλύτερη από p;
Παράλληλη Επεξεργασία (SW) Για επίτευξη παράλληλης επεξεργασίας πρέπει να γράψουμε παράλληλο κώδικα! Σκεφτόμαστε παράλληλα και: Διαιρούμε μια εργασία σε τμήματα που μπορούν να εκτελεστούν παράλληλα Κατανέμουμε τα τμήματα σε επεξεργαστές Ορίζουμε επικοινωνία και συγχρονισμό ώστε να μην περιορίζεται η επιτάχυνση Γράφουμε κώδικα σε δημοφιλείς γλώσσες παράλληλου προγραμματισμού!
Παράλληλη Επεξεργασία (HW) Πώς λειτουργούν τα παράλληλα συστήματα, ώστε Να υποστηρίζουν αποτελεσματικά τις γλώσσες παράλληλου προγραμματισμού Να έχουν υψηλή απόδοση, αλλά να έχουν ευκολία προγραμματισμού και χαμηλό κόστος Τελικά η γνώση της αρχιτεκτονικής είναι πολύ σημαντική για την επίτευξη των πιο πάνω στόχων!
Sun Enterprise 10000 (~1997) 64 UltraSPARC-II processors Προηγούμενες Δεκαετίες Στόχος η βελτίωση της απόδοσης του μονοεπεξεργαστικού συστήματος Thinking Machines CM2 (1987) 65,536 1-bit + 2,048 32 bit FP processors SGI Origin 2000 128 CPUs (1996) Blue Mountain (Los Alamos) (48 Origin 2000 s)
Παραλληλισμός σε Επίπεδο Εντολής Κορεσμός απόδοσης υπερβαθμωτών επεξεργαστών:
Πορεία προς Multicore Κορεσμός και στο ρολόι, και στην ισχύ!
Πορεία προς Multicore
Σημερινή Εποχή Τα παράλληλα συστήματα είναι πια αναγκαιότητα! Intel SkyLake (2015) Intel Xeon Phi 7290 (2016)
Σημερινή Εποχή (GPUs) Nvidia Maxwell GTX 1080 (2016)
Σημερινή Εποχή (Mobile)
Σημερινή Εποχή (Supercomputers) Από top500.org (11/2016): Rank Country System Cores Rmax (TFlop/s) Rpeak (TFlop/s) Power (kw) 1 China Sunway TaihuLight 10,649,600 93,014.6 125,435.9 15,371 2 China Tianhe-2 (MilkyWay-2) 3,120,000 33,862.7 54,902.4 17,808 3 USA Titan 560,640 17,590.0 27,112.5 8,209 4 USA Sequoia - BlueGene/Q 1,572,864 17,173.2 20,132.7 7,890 5 USA Cori 622,336 14,014.7 27,880.7 3,939 6 Japan Oakforest-PACS 556,104 13,554.6 24,913.5 2,719 7 Japan K computer 705,024 10,510.0 11,280.4 12,660 8 Switzerland Piz Daint 206,720 9,779.0 15,988.0 1,312 9 USA Mira - BlueGene/Q 786,432 8,586.6 10,066.3 3,945 10 USA Trinity 301,056 8,100.9 11,078.9 4,233
Παράλληλη Εκτέλεση Κώδικα Πολλαπλοί πυρήνες και νήματα στη CPU Κλασική παράλληλη επεξεργασία Παραδοσιακός παράλληλος προγραμματισμός Διανυσματική εκτέλεση SIMD στη CPU Παλαιότεροι supercomputers, τώρα απλές επεκτάσεις στη CPU Παραλληλισμός δεδομένων στη GPU Χρησιμοποιώντας κατάλληλη γλώσσα επεξεργασίας γραφικών (ActiveX, OpenGL) Ή και γενικού σκοπού (Cuda C, OpenCL)
Παράδειγμα Κώδικα Υπολογισμός ημιτόνου με τον τύπο Taylor για Ν FPs: void sinx(int N, int terms, float* x, float* result) { for (int i=0; i<n; i++) { float value = x[i]; float numer = x[i] * x[i] * x[i]; int denom = 6; // 3! int sign = -1; for (int j=1; j<=terms; j++) { value += sign * numer / denom; numer *= x[i] * x[i]; denom *= (2*j+2) * (2*j+3); sign *= -1; } result[i] = value; } }
Σειριακή Εκτέλεση
Βαθμωτός Επεξεργαστής
Βαθμωτός Επεξεργαστής
Βαθμωτός Επεξεργαστής
Υπερβαθμωτός Επεξεργαστής ILP???
Πολυεπεξεργαστής 2 Πυρήνων Κάθε πυρήνας είναι απλούστερος από κάποιον πολύπλοκο μονοεπεξεργαστή αλλά συνολικά η απόδοση βελτιώνεται!
Πολυεπεξεργαστής 4 Πυρήνων
Παράλληλος Κώδικας Σε κάποια υποθετική παράλληλη γλώσσα: Ο εξωτερικός βρόχος είναι παράλληλος!
Παραλληλισμός με pthreads Κώδικας 2 νημάτων, άρα για επεξεργαστή 2 πυρήνων!
Διανυσματική Εκτέλεση Στην ουσία προσθέτουμε νέες μονάδες εκτέλεσης στον μονοεπεξεργαστή, και τις χρησιμοποιούμε μέσα από κατάλληλη επέκταση του συνόλου εντολών του!
Διανυσματικός Κώδικας (AVX) Διανυσματικές επεκτάσεις της C, ώστε ο κώδικας να υπολογίζει 8 ημίτονα ταυτόχρονα (πράξεις σε μία λέξη των 8x32=256 bits!) AVX εντολές:
Κώδικας με Διακλαδώσεις Κώδικας για διανυσματική (???) εκτέλεση:
Κώδικας με Διακλαδώσεις
Κώδικας με Διακλαδώσεις Κάποιες ALU παραμένουν άεργες, στη χειρότερη περίπτωση η απόδοση πέφτει στο 1/8 της μέγιστης!
Κώδικας με Διακλαδώσεις
Συνεκτική Εκτέλεση Συνεκτική (ή ομοιόμορφη) εκτέλεση εντολών (coherent execution) Η ίδια ακολουθία εντολών για όλα τα στοιχεία του πίνακα που επεξεργαζόμαστε Η συνεκτικότητα απαραίτητη για αποδοτική διανυσματική εκτέλεση (SIMD) Η συνεκτικότητα δεν είναι απαραίτητη για αποδοτική εκτέλεση σε πολυπύρηνα συστήματα, εφόσον κάθε πυρήνας εκτελεί άλλη ακολουθία εντολών (MIMD)
Εκτέλεση στην GPU Εκτέλεση τύπου SPMD και όχι SIMD, μια που ο διανυσματικός παραλληλισμός αναφέρεται σε ολόκληρες ακολουθίες κώδικα και όχι σε εντολές Στην ουσία γράφουμε ένα υποπρόγραμμα, το οποίο ζητάμε να εκτελεστεί σε Ν αντίγραφα, σε Ν παράλληλα νήματα της GPU Πιο αναλυτικά σε επόμενο μάθημα
Προσπέλαση Μνήμης Χρόνος καθυστέρησης (memory latency) Είναι ο χρόνος εξυπηρέτησης μιας αίτησης (ανάγνωσης ή εγγραφής) στο σύστημα μνήμης Παράδειγμα: 100 cycles, 100 nsec Εύρος ζώνης μνήμης (memory bandwidth) Είναι ο ρυθμός με τον οποίο το σύστημα μνήμης τροφοδοτεί τον επεξεργαστή με δεδομένα Παράδειγμα: 20 GB/s
Παγώματα (Stalls) Όπως γνωρίζουμε, εξαρτήσεις από φορτώσεις μνήμης μπορούν να οδηγήσουν σε παγώματα στη λειτουργία του επεξεργαστή Ο χρόνος προσπέλασης που αντιστοιχεί σε ένα πάγωμα είναι στην ουσία ο χρόνος καθυστέρησης της μνήμης
Κρυφές Μνήμες Η ιεραρχία μνήμης μειώνει το χρόνο παγώματος
Προσκόμιση εκ των προτέρων Οι σύγχρονοι επεξεργαστές υλοποιούν εκ των προτέρων προσκόμιση (prefetching) με κάποιον τρόπο Ανάλυση του κώδικα (στατικά ή δυναμικά) μπορεί να δείξει πότε πρέπει να ενεργοποιηθεί εκ των προτέρων προσκόμιση Αν η πρόβλεψη για εκ των προτέρων προσκόμιση είναι αποτυχημένη, επιβαρύνεται η ιεραρχία μνήμης, ενώ ταυτόχρονα μπαίνουν άχρηστα δεδομένα στην κρυφή μνήμη
Νήματα και Παγώματα Η πολυνηματική εκτέλεση (multithreading) είναι τυπική μέθοδος απόκρυψης των καθυστερήσεων (latency hiding) από φορτώσεις μνήμης Αυτό επιτυγχάνεται μέσω της διαφύλλωσης νημάτων Τα παγώματα δεν εξαλείφονται ούτε μειώνονται, όμως εξαλείφεται η επίδρασή τους στο χρόνο εκτέλεσης ενός κώδικα
Απόκρυψη Καθυστέρησης
Απόκρυψη Καθυστέρησης
Απόκρυψη Καθυστέρησης
Απόκρυψη Καθυστέρησης
Βελτίωση Ρυθμού Εκτέλεσης Εν τέλει, αυτό που βελτιώνεται δραματικά είναι ο ρυθμός εκτέλεσης των επιμέρους νημάτων και όχι ο χρόνος ολοκλήρωσης του κώδικα ενός νήματος, ο οποίος μπορεί να αυξηθεί! Εδώ το νήμα είναι έτοιμο, αλλά δεν εκτελείται ακόμα!
Κατανομή Μνήμης Νημάτων
Πολυνηματικές Αρχιτεκτονικές Κάθε πυρήνας: Εκτελεί εντολές από έτοιμα νήματα, με κάποιο δικό του μηχανισμό επιλογής νήματος Χρησιμοποιεί τις μονάδες εκτέλεσής του, ώστε να αποκρύβει τις καθυστερήσεις Διαφυλλωμένη πολυνημάτωση (interleaved multithreading) Εναλλαγή νημάτων ανά κύκλο μηχανής Πολυνημάτωση ανά μπλοκ εντολών (blocked multithreading) Αλλαγή νήματος μόνο σε κάποια καθυστέρηση
Ταυτόχρονη Πολυνημάτωση SMT: simultaneous multithreading (~1995) Συνδυασμός υπερβαθμωτής εκτέλεσης με διαφυλλωμένη πολυνημάτωση Πολύπλεξη εντολών από πολλαπλά νήματα Παράδειγμα: Intel Hyper-threading (2 νήματα ανά πυρήνα) Τελικά αυτή η τεχνική έχει καθιερωθεί σήμερα ως πολυνημάτωση
Αναπαράσταση Διαφυλλωμένη πολυνημάτωση μεταξύ δύο νημάτων που εναλλάσσονται ανά κύκλο μηχανής:
Αναπαράσταση Πολυνημάτωση ανά μπλοκ εντολών μεταξύ δύο νημάτων:
Αναπαράσταση Ταυτόχρονη πολυνημάτωση 5 νημάτων σε υπερβαθμωτό επεξεργαστή βαθμού 4:
Κίνητρο SMT
Πολυνημάτωση (Σύνοψη) + αποδοτική χρήση μονάδων εκτέλεσης + απόκρυψη καθυστερήσεων + πλήρωση θέσεων έκδοσης εντολών σε υπερβαθμωτό επεξεργαστή (για SMT) - απαίτηση μνήμης για πολλαπλά νήματα - αύξηση χρόνου εκτέλεσης μεμονωμένων νημάτων - αυξημένες ανάγκες εύρους ζώνης μνήμης