Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 4 η : Παράλληλος Προγραμματισμός. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Σχετικά έγγραφα
Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 3 η : Παράλληλη Επεξεργασία. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Αρχιτεκτονική Υπολογιστών

2. Στοιχεία Αρχιτεκτονικής Παράλληλων Υπολογιστών... 45

Θέματα Μεταγλωττιστών

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Αρχιτεκτονική Υπολογιστών

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εισαγωγή στην πληροφορική

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Κατανεμημένα Συστήματα

ΠΕΡΙΕΧΟΜΕΝΑ Υλικό και Λογισμικό Αρχιτεκτονική Υπολογιστών Δομή, Οργάνωση και Λειτουργία Υπολογιστών 6

Αρχιτεκτονική Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Αρχιτεκτονική Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

Παράλληλη Επεξεργασία Κεφάλαιο 6 ο Σύγχρονος Παραλληλισμός

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Πολυπύρηνοι επεξεργαστές Multicore processors

Παράλληλη Επεξεργασία Κεφάλαιο 7 ο Αρχιτεκτονική Συστημάτων Κατανεμημένης Μνήμης

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

i Throughput: Ο ρυθμός ολοκλήρωσης έργου σε συγκεκριμένο χρόνο

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

ΑΕΠΠ Ερωτήσεις θεωρίας

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης)

εισαγωγικές έννοιες Παύλος Εφραιμίδης Δομές Δεδομένων και

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

ΠΕΚ ΤΡΙΠΟΛΗΣ ΕΠΙΜΟΡΦΩΣΗ ΕΚΠ/ΚΩΝ ΠΕ19,20 ΗΜ/ΝΙΑ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ

Θέματα Προγραμματισμού Η/Υ

Παραλληλισμός σε επίπεδο εντολών

Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 8 ο Μερική Επικάλυψη. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ << ΜΕΛΕΤΗ ΤΗΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ CUDA ΚΑΙ ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΡΤΩΝ GPU ΤΗΣ NVIDIA >> Αρ. Μητρώου: 04/2519

Προγραμματισμός I (Θ)

9. Συστολικές Συστοιχίες Επεξεργαστών

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Κεντρική Μονάδα Επεξεργασίας. Επανάληψη: Απόδοση ΚΜΕ. ΚΜΕ ενός κύκλου (single-cycle) Παραλληλισμός σε επίπεδο εντολών. Υπολογιστικό σύστημα

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Θέματα Μεταγλωττιστών

Εισαγωγή στον Προγραμματισμό

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB)

Υ07. Διδάσκων: ΠΑΡΑΛΛΗΛΑ ΣΥΣΤΗΜΑΤΑ. Β. Δημακόπουλος.

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Εισαγωγή στην Επιστήμη των Υπολογιστών

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Θέματα Προγραμματισμού Η/Υ

ΛΟΓΙΚΑ ΔΙΑΓΡΑΜΜΑΤΑ. Γ Λυκείου Κατεύθυνσης Mike Trimos

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΣΥΣΤΗΜΑΤΑ ΠΑΡΑΛΛΗΛΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ 9o εξάμηνο ΗΜΜΥ, ακαδημαϊκό έτος

Τεχνολογίες Κύριας Μνήμης

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Πληροφορική ΙΙ Θεματική Ενότητα 7

Η πολυνηματική γλώσσα προγραμματισμού Cilk

Πρόβλημα 37 / σελίδα 207

Παράλληλη Επεξεργασία

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Παράλληλος προγραμματισμός: παράλληλες λ υπολογιστικές πλατφόρμες και ανάλυση προγραμμάτων

5/3/2012. Εισαγωγή στα Παράλληλα Συστήµατα (Οργάνωση-Προγραµµατισµός) Β. Δημακόπουλος Α. Ευθυμίου

Μέθοδοι πολυδιάστατης ελαχιστοποίησης

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Εργασία για το μεταπτυχιακό μάθημα Παράλληλοι υπολογισμοί από τον φοιτητή Μουζακίδη Αλέξανδρο AM M 853

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

8 FORTRAN 77/90/95/2003

i Στα σύγχρονα συστήματα η κύρια μνήμη δεν συνδέεται απευθείας με τον επεξεργαστή

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

ΑΛΓΟΡΙΘΜΟΙ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Υπολογισμός - Εντολές Επανάληψης

Μετρικές & Επιδόσεις. Κεφάλαιο V

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Προγραμματισμός Ι (HY120)

Transcript:

Γιώργος Δημητρίου Ενότητα 4 η : Παράλληλος Προγραμματισμός

Παράλληλος Προγραμματισμός Ο παράλληλος προγραμματισμός με βάση την αφαιρετικότητα: Ελάχιστη έως καμία γνώση της αρχιτεκτονικής Επεκτάσεις παράλληλου προγραμματισμού που μεταφράζονται από το μεταγλωττιστή για το υλικό που διατίθεται Για παράδειγμα, οι δομές doall, doacross, forall, foreach είναι ανεξάρτητες υλικού Μέτρια έως καλή γνώση της αρχιτεκτονικής Επεκτάσεις παράλληλου προγραμματισμού που είναι προσαρμοσμένες στο υλικό Για παράδειγμα, οι επεκτάσεις SIMD για διανυσματικές πράξεις, οι επεκτάσεις SPMD για GPUs

Παράδειγμα: ISPC Intel SPMD Program Compiler SPMD: Single Program Multiple Data Συνήθως η έννοια SPMD χρησιμοποιείται σε προγραμματισμό GPU Η Intel προσδίδει αφαιρετικότητα και παρέχει τον ISPC ως μεταγλωττιστή της C/C++ με επεκτάσεις που μεταφράζονται είτε σε διανυσματικές είτε σε πολυνηματικές λειτουργίες http://ispc.github.com Open-source project, όχι άμεσο προϊόν της Intel!

Παράδειγμα Κώδικα Κώδικας προηγούμενου μαθήματος: (Υπολογισμός ημιτόνου με τον τύπο Taylor για Ν αριθμούς) από CMU

Κώδικας ISPC Δημιουργία programcount αντιγράφων της συνάρτησης sinx() που καλούνται παράλληλα από CMU

Επεκτάσεις ISPC Επεκτάσεις για εκτέλεση SPMD export: Δημιούργησε αντίγραφα του κώδικα uniform: Η μεταβλητή έχει ίδια τιμή σε όλα τα αντίγραφα varying: Η μεταβλητή έχει τοπική εμβέλεια (υπονοείται αν δεν δηλωθεί) programcount: Πλήθος αντιγράφων που δημιουργήθηκαν programindex: Αριθμός αντιγράφου Πρόσθετες επεκτάσεις για εκτέλεση MIMD

Διαφύλλωση Δεδομένων Ίδιο αντίγραφο ανά programcount λέξεις από CMU

Εναλλακτικός Κώδικας Διαφορετική κατανομή του χώρου δεδομένων στα αντίγραφα του κώδικα της συνάρτησης sinx() από CMU

Μπλοκ Δεδομένων Διαδοχικές λέξεις στο ίδιο αντίγραφο από CMU

Υλοποίηση με Διαφύλλωση από CMU

Υλοποίηση με Μπλοκ από CMU

ISPC με Διακλαδώσεις Ισχύει και εδώ η αρχή της συνεκτικής εκτέλεσης: float a =...; uniform int b = 0; if (a == 0) { ++b; // b is 1 } else { b = 10; // b is 10 } // whether b is 1 or 10 depends on whether any of the values // of "a" in the executing gang were 0. από ispc Ο κώδικας εκτελείται με την ιδέα ενός κοινού μετρητή προγράμματος!

Αφαιρετικότητα Η δομή foreach αφήνει το μεταγλωττιστή ISPC να κάνει την κατανομή των δεδομένων από CMU

Άλλες Δομές ISPC Δημιουργία πολυδιάστατων αντιγράφων foreach (j = 0... height, i = 0... width) { // loop body--process data element (i,j) } από ispc Δεν υπάρχει περιορισμός στο πλήθος των διαστάσεων

Άλλες Δομές ISPC Πώς δημιουργούμε κρίσιμες περιοχές: uniform float array[...] = {... }; int index =...; ++array[index]; πιθανά απρόβλεπτο αποτέλεσμα από την αύξηση του στοιχείου array[index] (γιατί;) Χρήση δομής foreach_active uniform float array[...] = {... }; int index =...; foreach_active (i) { ++array[index]; } από ispc

Υλοποίηση Από την αφαιρετικότητα του μοντέλου SPMD Κατά τον προγραμματιστή απλά ξεκινάμε programcount αντίγραφα κώδικα στην υλοποίηση του μοντέλου SIMD Ο μεταγλωττιστής ISPC παράγει διανυσματικές εντολές SSE4 ή AVX, με πιθανά πολλαπλές ροές που ακολουθούν την αρχή της συνεκτικής εκτέλεσης Απαιτείται καλή κατανόηση του ISPC

Αφαιρετικότητα Επικοινωνίας Τρία διαφορετικά μοντέλα επικοινωνίας παράλληλου κώδικα: Μέσω κοινής μνήμης Μέσω μηνυμάτων Μέσω παραλληλισμού δεδομένων

Κοινή Μνήμη Παράλληλα νήματα προσπελαύνουν ενιαίο χώρο διευθύνσεων από CMU

Κλειδαριές Οι κλειδαριές βρίσκονται επίσης στην κοινή μνήμη! από CMU

Επικοινωνία Κοινής Μνήμης Διαφορετικά νήματα επικοινωνούν μεταξύ τους: Γράφοντας/Διαβάζοντας κοινές μεταβλητές Η επικοινωνία επιτυγχάνεται με απλή προσπέλαση μνήμης Στο παράδειγμα, το νήμα 1 γράφει το X Στη συνέχεια, το νήμα 2 διαβάζει το Χ, βλέποντας την εγγραφή από το νήμα 1 Χρησιμοποιώντας εντολές συγχρονισμού Υλοποίηση αμοιβαίου αποκλεισμού με κλειδαριές Η μετάβαση από σειριακό προγραμματισμό σε παράλληλο προκύπτει πιο φυσικά

Συμμετρικοί Πολυεπεξεργαστές Ομοιόμορφη προσπέλαση μνήμης από όλα τα επεξεργαστικά στοιχεία (UMA) από CMU

Παραδείγματα UMA Συστήματα x86 Διασύνδεση τύπου δακτυλίου από CMU

Παραδείγματα UMA SUN Niagara 2 (UltraSPARC T2) Παρατηρήστε το δίκτυο στο μέγεθος ενός πυρήνα! από CMU

Μη Συμμετρικά Συστήματα Ανομοιόμορφη προσπέλαση μνήμης (NUMA) Παράδειγμα: Σύστημα με δύο 4-πύρηνες CPU Το κόστος προσπέλασης του X είναι μεγαλύτερο από τους πυρήνες 5-8 από ό,τι από τους 1-4 από CMU

UMA ή NUMA; Η ομοιόμορφη προσπέλαση μνήμης δεν είναι επεκτάσιμη Για μεγάλα συστήματα: η ομοιομορφία στο κόστος προσπέλασης εξουδετερώνεται από το ύ- ψος του η μνήμη είναι ομοιόμορφα μακρινή! Αντίθετα, η ανομοιόμορφη προσπέλαση μνήμης είναι επεκτάσιμη Χαμηλό κόστος για την τοπική μνήμη, η οποία μπορεί να συνδεθεί με υψηλό εύρος ζώνης Τα συστήματα NUMA είναι πιο δύσκολο να προγραμματιστούν για υψηλή απόδοση!

Παράδειγμα NUMA SGI Altix UV 1000 256 blades, 2 CPUs/blade, 8 cores/cpu Ενιαίος χώρος διευθύνσεων Δίκτυο διασύνδεσης: fat tree από CMU

Πέρασμα Μηνυμάτων Κάθε νήμα έχει δικό του χώρο διευθύνσεων Επικοινωνία με μηνύματα send: παραλήπτης, δεδομένα και ίσως ετικέτα receive: αποστολέας, χώρος εγγραφής και ίσως ετικέτα για αναγνώριση Ο μόνος τρόπος επικοινωνίας για τα δύο νήματα! από Culler, Singh, Gupta 1998

Πολυυπολογιστές Ο όρος «πολυυπολογιστές» περιγράφει παράλληλα συστήματα που υλοποιούν επικοινωνία με πέρασμα μηνυμάτων Σε σχέση με τους πολυεπεξεργαστές: Έχουμε ουσιαστικά πλήρη επιμέρους συστήματα, αντί μόνο πυρήνες ή CPU Τα συστήματα αυτά ενώνονται με κάποιο εξωτερικό δίκτυο διασύνδεσης Πολλές φορές τα επιμέρους συστήματα είναι πολυεπεξεργαστές!

Παράδειγμα Συνήθως χρησιμοποιείται το πρότυπο MPI μέσω κατάλληλης βιβλιοθήκης Το υλικό αρκεί να υποστηρίζει μηνύματα

Παράδειγμα Cluster latedays (CMU), 18 κόμβοι Κάθε κόμβος περιλαμβάνει: 2 6-core Xeon e5-2620 v3 processors (844 GFLOPS) 2.4 GHz, 15MB L3 cache, hyper-threading, AVX2 16 GB RAM (60 GB/sec bandwidth) 15 κόμβοι περιλαμβάνουν επιπλέον: 1 NVIDIA K40 GPU (4.2 TFLOPS) 1 Xeon Phi 5110p co-processor board (2 TFLOPS) 3 κόμβοι περιλαμβάνουν επιπλέον: 1 NVIDIA TitanX GPU (6 TFLOPS) Συνολική μέγιστη απόδοση: 105 TFLOPS

Παραλληλισμός Δεδομένων Τα γνωστά μας μοντέλα SIMD, SPMD Ίδια επεξεργασία σε διαφορετικά δεδομένα Υπερυπολογιστές των 70 s, 80 s Connection Machine (CM-1, CM-2): χιλιάδες επεξεργαστές, μία μονάδα αποκωδικοποίησης Cray: διανυσματικοί υπολογιστές add(a, B, n) εντολή πρόσθεσης διανυσμάτων Matlab: C = A + B Σήμερα είναι πιο συχνή η υλοποίηση SPMD

Δεδομένα προς Νήματα Σε αυτόν τον κώδικα ISPC, εμείς βλέπουμε μια κατανομή στοιχείων διανυσμάτων σε νήματα, την οποία όμως δεν βλέπει το υλικό! Η εντολή foreach της ISPC απλά ορίζει το χώρο επαναλήψεων του παράλληλου βρόχου, και όχι την κατανομή των δεδομένων από CMU

Δεδομένα προς Νήματα Εδώ γίνεται καλύτερα κατανοητό αυτό που υπονοεί η προηγούμενη διαφάνεια: Η εντολή foreach δεν φαίνεται πώς κατανέμει τα στοιχεία των διανυσμάτων σε νήματα! από CMU

Δεδομένα προς Νήματα από CMU Και το πρόβλημα γίνεται πιο περίπλοκο, όταν είναι πιθανό κάποιες επαναλήψεις να αναφέρονται σε στοιχεία που φαινομενικά είναι άλλων επαναλήψεων. Το αποτέλεσμα αυτού του κώδικα είναι απροσδιόριστο! Το μοντέλο παραλληλισμού δεδομένων από μόνο του δεν ορίζει σειρά στην εκτέλεση των επαναλήψεων, και απαιτείται συγχρονισμός των νημάτων για κάτι τέτοιο

Προγραμματισμός Ροής Stream programming: παραλληλισμός δεδομένων σε μια συναρτησιακή μορφή Streams: ακολουθίες στοιχείων, όπου η επεξεργασία των στοιχείων μπορεί να γίνεται ανεξάρτητα. Kernels: συναρτήσεις χωρίς παρενέργειες. Το παράδειγμα είναι σε κάποια ψευδοεπέκταση της ISPC από CMU

Λειτουργίες Gather-Scatter από CMU

Gather από CMU

Σύνοψη Μοντέλων Τα μοντέλα προγραμματισμού παρέχουν έναν τρόπο σκέψης για την οργάνωση παράλληλων προγραμμάτων Και αυτό επιτυγχάνεται με τη βοήθεια αφαιρετικών εννοιών που εν τέλει επιτρέπουν πολλαπλές διαφορετικές υλοποιήσεις

Σύνοψη - Αφαιρετικότητα Με την αφαιρετικότητα εισάγονται περιορισμοί, οι οποίοι: Αφορούν το κόστος του παραλληλισμού και της επικοινωνίας, με αποτέλεσμα ο προγραμματιστής να γράψει αποδοτικότερο κώδικα Αποτελούν πληροφορία για τους κατασκευαστές μεταγλωττιστών/βιβλιοθηκών/υλικού, ώ- στε να υλοποιούν καλύτερο κώδικα

Σύνοψη Τα 3 Μοντέλα Κοινή μνήμη: Μη δομημένη επικοινωνία ως προσπέλαση μνήμης Πιο φυσικό μοντέλο, πιο εύκολα λάθη Πέρασμα μηνυμάτων Δομημένη επικοινωνία ως μηνύματα Πιο δύσκολος προγραμματισμός Παραλληλισμός δεδομένων Ο υπολογισμός γίνεται με απεικόνιση των δεδομένων σε νήματα Αρχικά μόνο για παράλληλους βρόχους

Σύνοψη Σύγχρονες Τεχνικές Χρήση κοινής μνήμης μέσα σε έναν πολυπύρηνο κόμβο, πέρασμα μηνυμάτων μεταξύ κόμβων Η ιδέα είναι να χρησιμοποιείς την ευκολία της κοινής μνήμης όπου είναι αποδοτικό (δηλαδή εντός του κόμβου) Τα μοντέλα παραλληλισμού δεδομένων έχουν επεκτάσεις για υποστήριξη επικοινωνίας μέσω κοινής μνήμης (πχ. CUDA, OpenCL)

Δημιουργία Παράλληλου Κώδικα Πέρα από την αφαιρετικότητα και τα τρία μοντέλα παράλληλου προγραμματισμού: Ας δούμε την ουσία του παράλληλου προγραμματισμού δηλαδή τον παράλληλο κώδικα και ειδικότερα τα στάδια μέσα από τα οποία γράφουμε έναν παράλληλο κώδικα

Παραλληλισμός Ας πάρουμε το γνωστό παράδειγμα ISPC: από CMU Πού ακριβώς υπάρχει παραλληλία στον κώδικα; Παρόλο που ο εξωτερικός βρόχος είναι θεωρητικά παράλληλος, εδώ δεν υπάρχει εντολή παράλληλης εκτέλεσής του! Η παράλληλη εκτέλεση δεν γίνεται σε επίπεδο βρόχου, αλλά σε επίπεδο συνάρτησης (ως SPMD)

Γράφοντας Παράλληλο Κώδικα Για να γράψουμε έναν παράλληλο κώδικα, ακολουθούμε τα εξής βήματα: 1. Εύρεση στον αλγόριθμο της εργασίας που μπορεί να γίνει παράλληλα 2. Κατανομή της εργασίας σε επεξεργαστικά στοιχεία μαζί με τα σχετικά δεδομένα 3. Διαχείριση προσπέλασης δεδομένων, επικοινωνίας και συγχρονισμού Σκοπός: βελτίωση της απόδοσης Επιτάχυνση σε χρόνο, αλλά και βελτίωση κόστους, ενέργειας ή άλλων μέτρων αξιολόγησης

Εύρεση Παράλληλων Τμημάτων Διαίρεσε το πρόβλημα σε τμήματα (tasks) που να εκτελούνται παράλληλα Η διαίρεση μπορεί να γίνει στατικά, αλλά και δυναμικά Στατικά από το μεταγλωττιστή Δυναμικά κατά την εκτέλεση Σκοπός είναι να κάνουμε βέλτιστη χρήση του παραλληλισμού του υλικού Βασικό σημείο: Η ανάλυση των εξαρτήσεων στα τμήματα του κώδικα

Νόμος του Amdahl Ας θυμηθούμε το νόμο του Amdahl (από την Αρχιτεκτονική Υπολογιστών): Αν s είναι το κλάσμα της εκτέλεσης που είναι σειριακή (λόγω εξαρτήσεων που δεν επιτρέπουν παράλληλη εκτέλεση), τότε η μέγιστη βελτίωση της απόδοσης από παράλληλη εκτέλεση είναι 1 s

Παράδειγμα Έστω κάποια επεξεργασία εικόνας N N που γίνεται σε δύο βήματα Βήμα 1: διπλασιασμός φωτεινότητας σε όλα τα εικονοστοιχεία (εμφανώς παράλληλος υπολογισμός μεταξύ στοιχείων) Βήμα 2: υπολογισμός μέσης τιμής όλων των στοιχείων (όχι πλήρως παράλληλος υπολογισμός μεταξύ στοιχείων) Για σειριακό προγραμματισμό, κάθε βήμα είναι ~N 2, άρα σύνολο ~2N 2

Παράδειγμα Πρώτη προσπάθεια παράλληλης υλοποίησης σε p επεξεργαστικά στοιχεία: Βήμα 1: παράλληλο, άρα χρόνος ~N 2 /p Βήμα 2: σειριακό, άρα χρόνος ~N 2 Σύνολο: ~(N 2 /p + N 2 ) Επαλήθευση νόμου Amdahl: Speedup = 2N 2 N 2 = p + N2 δηλαδή η επιτάχυνση δε μπορεί να είναι μεγαλύτερη από το αντίστροφο του 1/2 2 1 + 1 p 2

Παράδειγμα Δεύτερη προσπάθεια παράλληλης υλοποίησης σε p επεξεργαστικά στοιχεία: Βήμα 1: παράλληλο, άρα χρόνος ~N 2 /p Βήμα 2: παράλληλος υπολογισμός p επιμέρους αθροισμάτων, σειριακό συγκεντρωτικό άθροισμα, άρα χρόνος ~(N 2 /p + p) Σύνολο: ~(2N 2 /p + p) Και ο νόμος του Amdahl μας λέει: Speedup = 2N2 2N 2 = p + p 1 + 1 2 p p N 2 p

Εύρεση Παράλληλων Τμημάτων Τις περισσότερες φορές τη δουλειά αυτή την κάνει ο προγραμματιστής Αυτόματη παραλληλοποίηση (δηλαδή ανίχνευση των τμημάτων που εκτελούνται παράλληλα) συνεχίζει να είναι πρόκληση Ιδιαίτερα δύσκολη τις περισσότερες φορές Ο μεταγλωττιστής πρέπει να υπολογίσει τις εξαρτήσεις μεταξύ των τμημάτων του κώδικα Αδύνατο αν αυτές είναι δυναμικές Επιτυχία μόνο σε φωλιάσματα βρόχων με γραμμικό χώρο επαναλήψεων

Κατανομή Εργασίας Κατανομή παράλληλων τμημάτων σε αφηρημένα επεξεργαστικά στοιχεία Πιθανοί στόχοι: Ισορροπία φόρτου Ελαχιστοποίηση επικοινωνίας Στατική ή δυναμική κατανομή Συνήθως ο προγραμματιστής έχει την ευθύνη του προηγούμενου σταδίου, με την κατανομή να γίνεται μέσα από τη γλώσσα προγραμματισμού ή από το σύστημα

Παράδειγμα Στατική κατανομή Η χρήση SPMD με τη βοήθεια των μεταβλητών programcount και programindex... ορίζει ξεκάθαρα στατική κατανομή επαναλήψεων σε νήματα από CMU

Παράδειγμα Δυναμική κατανομή Η χρήση της δομής foreach επιτρέπει δυναμική κατανομή επαναλήψεων σε νήματα και ο προγραμματιστής δε γνωρίζει πώς γίνεται η κατανομή (υλοποίηση?) από CMU

Παράδειγμα Δυναμική κατανομή Χρήση εντολής launch για δημιουργία 100 tasks: το σύστημα τα κατανέμει ένα-ένα σε διαθέσιμα επεξεργαστικά στοιχεία από CMU

Διαχείριση Δεδομένων Διαχείριση της επικοινωνίας μεταξύ των αφηρημένων επεξεργαστικών στοιχείων Προσθήκη συγχρονισμού για εξαρτήσεις Οργάνωση μνήμης Δρομολόγηση επιμέρους εργασιών Στόχοι: ελαχιστοποίηση κόστους επικοινωνίας, εκμετάλλευση τοπικότητας μνήμης Στοιχεία αρχιτεκτονικής για επιλογές πχ χρήση συγχρονισμού ανάλογα με το κόστος

Ανάθεση στο Υλικό Ανάθεση αφηρημένων σε πραγματικά επεξεργαστικά στοιχεία Περίπτωση 1: Ανάθεση μέσω συστήματος, όπως συμβαίνει με χρήση pthreads Περίπτωση 2: Ανάθεση μέσω μεταγλωττιστή, όπως μέσω ISPC Περίπτωση 3: Ανάθεση από το υλικό, όπως συμβαίνει με τα CUDA threads και τις GPU Αποφάσεις: Ανάθεση στο ίδιο πραγματικό στοιχείο σχετικών ή άσχετων αφηρημένων στοιχείων;

Παράδειγμα Επίλυση 2D μερικής διαφορικής εξίσωσης (PDE) σε πλέγμα (N+2) (N+2) Επαναληπτική μέθοδος Gauss-Seidel από Culler, Singh, Gupta 1998

Σειριακή Υλοποίηση Ψευδοκώδικας C από Culler, Singh, Gupta 1998

Ανάλυση Εξαρτήσεων Εξαρτήσεις μιας επανάληψης while από Culler, Singh, Gupta 1998

Ανίχνευση Παραλληλισμού Παραλληλισμός σε διαγώνια εκτέλεση Υλοποίηση ανά διαγώνιο: 1. Κατανομή σημείων σε εργασίες 2.Παράλληλος υπολογισμός σημείων διαγωνίου 3. Μετάβαση στην επόμενη διαγώνιο Μη αποδοτική υλοποίηση: υπάρχουν σημεία χαμηλού παραλληλισμού, συχνή επικοινωνία από Culler, Singh, Gupta 1998

Αλλαγή αλγορίθμου προς κάποιον που είναι πιο παράλληλος: Αλλαγή σειράς επεξεργασίας σημείων πλέγματος Ο νέος αλγόριθμος εργάζεται επαναληπτικά προς την ίδια λύση, αλλά με άλλη διαδικασία Ίσως οι τιμές αριθμών κινητής υποδιαστολής να προκύπτουν διαφορετικές ok αν είναι εντός ορίων σφάλματος Μήπως η αλλαγή αλγορίθμου είναι στην ουσία αλλαγή της μεθόδου; Βελτιωμένη Υλοποίηση

Αναδιάταξη Χώρου Δεδομένων Δημιουργία διαγωνίων (κόκκινα/μαύρα κελιά) 1. Υπολόγισε όλα τα κόκκινα κελιά παράλληλα 2.Μετά τα κόκκινα κελιά, υπολόγισε όλα τα μαύρα κελιά παράλληλα, τηρώντας τις εξαρτήσεις από τα κόκκινα κελιά 3. Επανάλαβε έως τη σύγκλιση από Culler, Singh, Gupta 1998

Κατανομή σε Επεξεργαστικά Στοιχεία Επιλογή τρόπου με βάση την αρχιτεκτονική από Culler, Singh, Gupta 1998

Ροή Δεδομένων 1. Παράλληλος υπολογισμός των κόκκινων κελιών 2. Αναμονή ολοκλήρωσης βήματος 1 σε όλα τα στοιχεία 3. Επικοινωνία για αντιγραφή των κόκκινων τιμών στα άλλα στοιχεία 4. Παράλληλος υπολογισμός των μαύρων κελιών 5. Αναμονή ολοκλήρωσης βήματος 4 6. Επικοινωνία για αντιγραφή των μαύρων τιμών στα άλλα στοιχεία 7. Επανάληψη από CMU

Ανάγκη Επικοινωνίας Τέσσερα στοιχεία, με γκρι η επικοινωνία προς P2 σε κάθε επανάληψη από Culler, Singh, Gupta 1998

Παραλληλισμός Δεδομένων Κώδικας μόνο για τα κόκκινα κελιά: Παραλληλισμός ανά σημείο πλέγματος από Culler, Singh, Gupta 1998 Διαχείριση επικοινωνίας μέσω της συνάρτησης συστήματος reduceadd() Συγχρονισμός φράγματος που γίνεται αυτόματα από το σύστημα

Κώδικας Κοινής Μνήμης Μοντέλο SPMD Ο προγραμματιστής έχει την ευθύνη του συγχρονισμού, με: Κλειδαριές, για αμοιβαίο αποκλεισμό σε κρίσιμα τμήματα Φράγματα, για σημεία σύγκλισης παράλληλων ροών από CMU

Κώδικας Κοινής Μνήμης Καθολικές μεταβλητές Η συνάρτηση solve() εκτελείται ως SPMD Η μεταβλητή threadid διαχωρίζει τα νήματα μεταξύ τους Κάθε νήμα καθορίζει την περιοχή δεδομένων που επεξεργάζεται Κρίσιμο τμήμα από Culler, Singh, Gupta 1998

Αμοιβαίος Αποκλεισμός Για ποιο λόγο θέλουμε αμοιβαίο αποκλεισμό (μικρό παράδειγμα): όπου προσπαθούμε να αθροίσουμε τιμές από δύο νήματα στη μεταβλητή diff από CMU

Ατομικές Λειτουργίες Χρήση κλειδαριών (μέσω σεμαφόρων) για κλείδωμα κρίσιμων περιοχών: LOCK(mylock); // critical section UNLOCK(mylock); Οι απαιτούμενες ατομικές λειτουργίες (ανάγνωση-ενημέρωση-αποθήκευση) διατίθενται συνήθως ως ειδικές συναρτήσεις συστήματος (πχ atomicadd(x,10);) Κάποιες γλώσσες παρέχουν υποστήριξη για τέτοιες λειτουργίες σε υψηλό επίπεδο

Κρίσιμες Περιοχές Μήπως γίνεται και καλύτερα; Σκεφτείτε τη συχνότητα συγχρονισμού! από Culler, Singh, Gupta 1998

Κρίσιμες Περιοχές Βελτίωση απόδοσης με υλοποίηση τοπικού αθροίσματος Το συνολικό άθροισμα υπολογίζεται μόνο μία φορά ανά επεξεργαστικό στοιχείο! Μερικό άθροισμα Κλείδωμα μια φορά ανά νήμα, και όχι μια φορά ανά επανάληψη από Culler, Singh, Gupta 1998

Φράγματα Υλοποίηση συγχρονισμού με φράγματα: barrier(num_threads); Οι υπολογισμοί όλων των νημάτων πριν το φράγμα πρέπει να ολοκληρώνονται, ώστε η ροή του κώδικα να περάσει το φράγμα σε οποιοδήποτε νήμα! Τα φράγματα κάνουν συντηρητική υλοποίηση συγχρονισμού, προσθέτοντας εξαρτήσεις! από CMU

Φράγματα Τρία φράγματα! Γιατί; Γίνεται με λιγότερα; από Culler, Singh, Gupta 1998

Φράγματα Κάθε επόμενη επανάληψη βλέπει διαφορετική μεταβλητή diff Χρήση πιο τοπικών μεταβλητών, όσο είναι δυνατό! από Culler, Singh, Gupta 1998

Ανίχνευση Εξαρτήσεων Φράγματα: απλά, αλλά συντηρητικά Πιθανά καλύτερη απόδοση αν η ανίχνευση εξαρτήσεων είναι ακριβέστερη, ώστε να φανερώσει περισσότερο παραλληλισμό Παράδειγμα δύο νημάτων, το ένα παράγει μια τιμή, το άλλο τη χρησιμοποιεί: Τ0: // produce x, then let T1 know x = 1; flag = 1; // do more work here... Τ1: // do stuff independent // of x here while (flag == 0); print x; Με βάση αυτόν τον κώδικα γράφονται αλγόριθμοι με επικοινωνία μέσω μηνυμάτων

Πέρασμα Μηνυμάτων Υλοποίηση με πέρασμα μηνυμάτων σε επόμενο μάθημα Όμοιος τοπικός υπολογισμός Όμως τώρα πρέπει να φέρεις τα δεδομένα στην τοπική μνήμη Διαφορετική επικοινωνία αποτελεσμάτων με άλλα νήματα

Σύνοψη Νόμος του Amdahl Η επιτάχυνση απόδοσης από παράλληλη εκτέλεση περιορίζεται από το ποσοστό σειριακού κώδικα της εφαρμογής Στάδια δημιουργία παράλληλου κώδικα Ανίχνευση παράλληλων εργασιών, κατανομή σε αφηρημένα επεξεργαστικά στοιχεία, διαχείριση επικοινωνίας, ανάθεση σε πραγματικά επεξεργαστικά στοιχεία υλικού Σε επόμενα μαθήματα θα μελετήσουμε πολλά θέματα πάνω σε αυτά τα στάδια!