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

Εθνικό Μετσόβιο Πολυτεχνείο
Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών
Εργαστήριο Υπολογιστικών Συστημάτων
Παράλληλος προγραμματισμός:
Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων
Συστήματα Παράλληλης Επεξεργασίας
9ο Εξάμηνο
Σύνοψη παρουσίασης
 Παράλληλες υπολογιστικές πλατφόρμες




PRAM: Η ιδανική παράλληλη πλατφόρμα
Η ταξινόμηση του Flynn
Συστήματα κοινής μνήμης
Συστήματα κατανεμημένης μνήμης
 Ανάλυση παράλληλων προγραμμάτων
 Μετρικές αξιολόγησης επίδοσης
 Ο νόμος του Amdahl
 Μοντελοποίηση παράλληλων προγραμμάτων
 Σχεδίαση παράλληλων προγραμμάτων




2
Κατανομή υπολογισμών και δεδομένων
Σχεδιασμός αλληλεπίδρασης ανάμεσα στα tasks
Απεικόνιση των tasks σε διεργασίες (ή threads)
Ενορχήστρωση της επικοινωνίας ή/και του συγχρονισμού
Συστήματα Παράλληλης Επεξεργασίας
Σύνοψη παρουσίασης
 Παράλληλα προγραμματιστικά μοντέλα
 Κοινού χώρου διευθύνσεων
 Ανταλλαγής μηνυμάτων
 Παράλληλες προγραμματιστικές δομές
 SPMD
 fork / join
 task graphs
 parallel for
 Γλώσσες και εργαλεία
 POSIX threads, MPI, OpenMP, Cilk, Cuda, Γλώσσες PGAS
 Αλληλεπίδραση με το υλικό
 Συστήματα κοινής μνήμης
 Συστήματα κατανεμημένης μνήμης και υβριδικά
3
Συστήματα Παράλληλης Επεξεργασίας
PRAM: Η ιδανική παράλληλη
μηχανή
 Η θεωρητική ανάλυση και αξιολόγηση σειριακών αλγορίθμων βασίζεται στη
χρήση ενός υπολογιστικού μοντέλου:
 Random Access Machine (RAM)
 Turing machine
 Γιατί να μην κάνουμε το ίδιο και για τους παράλληλους αλγόριθμους;
 Ας ορίσουμε μια παράλληλη υπολογιστική μηχανή που θα μας βοηθάει να
αναλύουμε και να συγκρίνουμε παράλληλους αλγορίθμους:
 PRAM: Parallel Random Access Machine
 n υπολογιστικές μονάδες (n όσο μεγάλο απαιτεί το
προς επίλυση πρόβλημα)
 Κοινή μνήμη απεριόριστου μεγέθους
 Ομοιόμορφη πρόσβαση στη μνήμη από όλους τους
επεξεργαστές
4
Συστήματα Παράλληλης Επεξεργασίας
PRAM: Ταυτόχρονη πρόσβαση σε
δεδομένα
 Τι συμβαίνει όταν δύο επεξεργαστές αποπειρώνται να προσπελάσουν την
ίδια θέση μνήμης ταυτόχρονα;
 4 διαφορετικές προσεγγίσεις (διαφορετικά μοντέλα):
 Exclusive Read – Exclusive Write (EREW):
 Κάθε θέση μνήμης μπορείς να αναγνωστεί/εγγραφεί από μόνο έναν
επεξεργαστή (σε μια δεδομένη χρονική στιγμή)
 Αν συμβεί ταυτόχρονη πρόσβαση το πρόγραμμα τερματίζει
 Πρόκειται για πολύ περιοριστικό μοντέλο
 Concurrent Read – Exclusive Write (CREW):
 Επιτρέπεται ταυτόχρονη ανάγνωση αλλά όχι εγγραφή
 Exclusive Read – Concurrent Write (ERCW):
 Δεν παρουσιάζει θεωρητικό ή πρακτικό ενδιαφέρον
 Concurrent Read – Concurrent Write (CRCW)
 Ισχυρή μηχανή που επιτρέπει ταυτόχρονες αναγνώσεις / εγγραφές
 Ταυτόχρονες εγγραφές: (common, arbitrary, priority, reduction)
5
Συστήματα Παράλληλης Επεξεργασίας
PRAM: Προβλήματα
 Η πλατφόρμα PRAM κάνει κάποιες σοβαρές υπεραπλουστεύσεις που την
απομακρύνουν από τις πραγματικές μηχανές:
 Απεριόριστος αριθμός επεξεργαστών (όσους έχει ανάγκη το πρόγραμμα)
 Απεριόριστο μέγεθος μνήμης
 Ομοιόμορφος χρόνος πρόσβασης στη μνήμη
 Για να συνδυαστούν τα παραπάνω απαιτείται ένα τεράστιας
πολυπλοκότητας και κόστους δίκτυο διασύνδεσης με διακόπτες
 Τέτοια δίκτυα διασύνδεσης με την παρούσα τεχνολογία είναι ρεαλιστικά
για λίγες δεκάδες επεξεργαστές
 Η θεωρητική ανάλυση σε ένα μοντέλο PRAM δεν μας δίνει ασφαλή
συμπεράσματα για την εκτέλεση σε ένα πραγματικό παράλληλο σύστημα
(π.χ. κοινής μνήμης)
 Το μοντέλο PRAM έχει θεωρητικό ενδιαφέρον και δεν χρησιμοποιείται στην
πράξη
6
Συστήματα Παράλληλης Επεξεργασίας
Flynn’s taxonomy
 SISD
 Single Instruction Single Data
 SIMD
 Single Instruction Multiple Data
 MISD
 Multiple Instruction Single Data
 MIMD
 Multiple Instruction Multiple Data
7
Συστήματα Παράλληλης Επεξεργασίας
Flynn’s taxonomy
8
Συστήματα Παράλληλης Επεξεργασίας
Παράλληλες αρχιτεκτονικές:
Οργάνωση μνήμης
 Κοινής μνήμης (shared memory)
 UMA (Uniform memory access): Χρόνος προσπέλασης ανεξάρτητος του
επεξεργαστή και της θέσης μνήμης
 NUMA (Non-uniform memory access): Χρόνος προσπέλασης εξαρτάται από τον
επεξεργαστή και τη θέση μνήμης
 cc-NUMA (cache-coherent NUMA): NUMA με συνάφεια κρυφής μνήμης
 Κατανεμημένης μνήμης (distributed memory)
 Υβριδική
9
Συστήματα Παράλληλης Επεξεργασίας
Αρχιτεκτονική κοινής μνήμης
 Οι επεξεργαστές έχουν κοινή μνήμη
 Κάθε επεξεργαστής διαθέτει τοπική ιεραρχία κρυφών μνημών
 Συνήθως η διασύνδεση γίνεται μέσω διαδρόμου μνήμης (memory bus)
 Αλλά και πιο εξελιγμένα δίκτυα διασύνδεσης
 Ομοιόμορφη ή μη-ομοιόμορφη προσπέλαση στη μνήμη (Uniform Memory
Access – UMA, Non-uniform Memory Access – NUMA)
 Η κοινή μνήμη διευκολύνει τον παράλληλο προγραμματισμό
 Δύσκολα κλιμακώσιμη αρχιτεκτονική – τυπικά μέχρι λίγες δεκάδες κόμβους
(δεν κλιμακώνει το δίκτυο διασύνδεσης)
$
$
CPU
CPU
$
...
CPU
Διάδρομος Μνήμης (memory bus)
M
10
Συστήματα Παράλληλης Επεξεργασίας
SMP vs NUMA
Symmetric Multiprocessing (SMP)
Uniform Memory Access (UMA)
Non-Uniform Memory Access (NUMA)
Images taken from:
http://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
11
Συστήματα Παράλληλης Επεξεργασίας
Αρχιτεκτονική κατανεμημένης μνήμης
 Κάθε επεξεργαστής έχει τη δική του τοπική μνήμη και ιεραρχία τοπικών
μνημών
 Διασυνδέεται με τους υπόλοιπους επεξεργαστές μέσω δικτύου διασύνδεσης
 Η κατανεμημένη μνήμη δυσκολεύει τον προγραμματισμό
 Η αρχιτεκτονική κλιμακώνει σε χιλιάδες υπολογιστικούς κόμβους
Κόμβος 1
Κόμβος 2
$
$
CPU
CPU
M
Κόμβος Ν
$
...
M
Δίκτυο Διασύνδεσης (π.χ. Ethernet, Myrinet, SCI)
12
Συστήματα Παράλληλης Επεξεργασίας
CPU
M
Υβριδική αρχιτεκτονική
 Συνδυάζει τις δύο παραπάνω αρχιτεκτονικές: κόμβοι με αρχιτεκτονική
κοινής μνήμης διασυνδέονται με ένα δίκτυο διασύνδεσης σε αρχιτεκτονική
κατανεμημένης μνήμης
 Τυπική αρχιτεκτονική των σύγχρονων συστοιχιών-υπερυπολογιστών, data
centers και υποδομών cloud
SMP κόμβος 1
$
CPU0
...
$
$
CPUΚ
CPU0
M
SMP κόμβος Ν
SMP κόμβος 2
$
...
CPUΚ
$
...
CPU0
M
Δίκτυο Διασύνδεσης (π.χ. Ethernet, Myrinet, SCI)
13
Συστήματα Παράλληλης Επεξεργασίας
$
...
CPUΚ
M
Μετρικές αξιολόγησης επίδοσης:
Επιτάχυνση (Speedup)
 Χρόνος καλύτερου σειριακού αλγορίθμου: Ts
 Χρόνος παράλληλου αλγορίθμου: Tp
 Επιτάχυνση (speedup) S = Ts / Tp




14
Δείχνει πόσες φορές πιο γρήγορο είναι το παράλληλο πρόγραμμα από το σειριακό
linear (perfect) speedup σε p επεξεργαστές: p
Τυπικά: S ≤ p
Αν S > p → superlinear speedup (πρέπει να το ερμηνεύσουμε προσεκτικά αν
προκύψει στις μετρήσεις μας)
Συστήματα Παράλληλης Επεξεργασίας
Αποδοτικότητα (efficiency) και
κλιμακωσιμότητα (scalability)
 Αποδοτικότητα (efficiency) E = S / p
 Δείχνει πόσο επιτυχημένη είναι η παραλληλοποίηση – τι ποσοστό του χρόνου κάθε
επεξεργαστής κάνει χρήσιμη δουλειά
 Τυπικά Ε ≤ 1
 H κλιμακωσιμότητα (scalability) εκφράζει ποιοτικά την ικανότητα ενός
προγράμματος (συστήματος) να βελτιώνει την επίδοσή του με την προσθήκη
επιπλέον επεξεργαστών (πόρων)
 Strong scaling: Κρατάμε το συνολικό μέγεθος του προβλήματος σταθερό
 Weak scaling: Κρατάμε το μέγεθος ανά επεξεργαστή σταθερό
15
Συστήματα Παράλληλης Επεξεργασίας
Ο (αμείλικτος) νόμος του Amdahl
 Χρόνος καλύτερου σειριακού αλγορίθμου: Ts
 f το κλάσμα του χρόνου ενός σειριακού προγράμματος που δεν παραλληλοποιείται
 Νόμος του Amdahl:
T p = fT s
(
1- f ) Ts
+
p
T
1
S= s =
T p f + (1 - f )
p
 Έστω ότι ένα πρόγραμμα μπορεί να μοιραστεί σε 5 παράλληλες εργασίες εκ των οποίων η μία
απαιτεί διπλάσιο χρόνο από τις υπόλοιπες 4
 f = 1/6
 Αν p = 5 (αναθέτουμε κάθε μία από τις παράλληλες εργασίες σε έναν επεξεργαστή) → S = 3,
E=0,6
 Συνέπειες του νόμου του Amdahl:
 Παραλληλοποιούμε (και γενικά βελτιστοποιούμε) τμήματα του κώδικα που
καταλαμβάνουν το μεγαλύτερο ποσοστό του χρόνου εκτέλεσης
 Αναζητούμε παραλληλία παντού! (π.χ. 1% σειριακός κώδικας → μέγιστο speedup 100!)
16
Συστήματα Παράλληλης Επεξεργασίας
Γιατί δεν κλιμακώνει το
πρόγραμμά μου;
1.
2.
3.
Δεν έχει παραλληλοποιήθεί το κατάλληλο τμήμα κώδικα (υπάρχει μεγάλο
σειριακό κομμάτι, βλ. Νόμος του Amdahl)
Υπάρχει ανισοκατανομή φορτίου (load imbalance)
Κόστος συγχρονισμού / επικοινωνίας

4.
17
Μπορεί να οδηγήσει ακόμα και σε αύξηση του χρόνου εκτέλεσης
Συμφόρηση στο διάδρομο μνήμης (για αρχιτεκτονικές κοινής μνήμης)
Συστήματα Παράλληλης Επεξεργασίας
Γενικοί κανόνες βελτιστοποίησης
κώδικα
 1st and 2nd rule in code optimization…
18
Συστήματα Παράλληλης Επεξεργασίας
Γενικοί κανόνες βελτιστοποίησης
κώδικα
 1st and 2nd rule in code optimization…
DON’T DO IT!
Because…
“premature optimization is the root of all evil…” D. Knuth
19
Συστήματα Παράλληλης Επεξεργασίας
Μοντελοποίηση επίδοσης
 Η μοντελοποίηση της επίδοσης είναι ιδιαίτερα δύσκολη σε ένα πολύπλοκο
σύστημα όπως είναι η εκτέλεση μιας εφαρμογής σε μία παράλληλη
πλατφόρμα
 Θέλουμε το μοντέλο να είναι απλό και ακριβές
 Συνήθως καθοδηγεί σχεδιαστικές επιλογές (π.χ. συγκρίνει διαφορετικές
στρατηγικές)
 Συχνά αρκεί να έχουμε άνω και κάτω όρια στην επίδοση
 Ο παράλληλος χρόνος εκτέλεσης καταναλώνεται σε:
 Χρόνο υπολογισμού (Tcomp)
 Χρόνο επικοινωνίας (Tcomm)
 Άεργο χρόνο (Τidle)
 Παράλληλος χρόνος εκτέλεσης:
 Τ = Tcomp + Tcomm + Tidle
20
Συστήματα Παράλληλης Επεξεργασίας
Χρόνος υπολογισμών
 Κλασικό μοντέλο πρόβλεψης:
 Τcomp = ops * CPU speed
 Θεωρεί ότι η CPU μπορεί να τροφοδοτείται με δεδομένα από το υποσύστημα μνήμης
 Μοντέλο roofline




21
Λαμβάνει υπόψη το υποσύστημα μνήμης
Operational intensity (OI σε ops/byte)
Τcomp = ops * max (CPU speed, 1/(ΟΙ * memory bandwidth))
Συσχετίζει την εφαρμογή με την αρχιτεκτονική
Συστήματα Παράλληλης Επεξεργασίας
Μοντέλο roofline
Image taken from http://lorenabarba.com/news/new-paper-published-cise-journal
22
Συστήματα Παράλληλης Επεξεργασίας
Χρόνος υπολογισμών
Παράδειγμα: LU decomposition
for(k = 0; k < N-1; k++)
for(i = k+1; i < N; i++){
L[i] = A[i][k] / A[k][k];
for(j = k+1; j < N; j++)
A[i][j] = A[i][j] - L[i]*A[j][i];
}
 Operations = N3 / 3 πολλαπλασιασμοί, Ν3/3 προσθέσεις
 Μπορούμε να αγνοήσουμε τις προσθέσεις
 Operational intensity (ops/byte):





23
Μας αφορούν δεδομένα που έρχονται από την κύρια μνήμη (όχι από την cache)
Μπορούμε να αγνοήσουμε το διάνυσμα L
Μέγεθος Α = 8*Ν2 (θεωρούμε διπλή ακρίβεια, 8 bytes για κάθε στοιχείο του Α)
Αν ο A χωράει στην cache: ΟΙ = (N3/ 3) / (8*Ν2) = Ν/24 muls/byte
Αν ο Α >> cache size: Ας θεωρήσουμε ότι σε κάθε βήμα k ο Α φορτώνεται από τη μνήμη (γιατί
δεν είναι τυπικά σωστό αυτό?). ΟΙ = 1/24 muls/byte
Συστήματα Παράλληλης Επεξεργασίας
Χρόνος υπολογισμών
Παράδειγμα: LU decomposition
 Έστω επεξεργαστής με:
 CPU speed 5*108 muls/sec ή 2*10-9 sec/mul (500MFlops)
 Bandwidth διαδρόμου μνήμης: 4GB/sec = 4*109 bytes /sec
 4MB L2 cache
 N = 100 (ο Α χωράει στην cache, OI = 4,16 muls/byte)
 Παραδοσιακό μοντέλο:
 Τcomp = ops * CPU speed = 0.33*106 muls * 2*10-9 sec/mul = 0.66msec
 Μοντέλο roofline:
 Tcomp = ops * min (CPU speed, 1/(ΟΙ * memory bandwidth)) =
0.33*106 muls * max (2*10-9 sec/mul , (4,16 muls/byte * 4*109 bytes/sec)-1)=
0.33*106 muls * max (2*10-9 sec/mul , 6*10-11 sec/mul) = 0.66msec
 N = 2000 (ο Α δεν χωράει στην cache, OI = 0,042 muls/byte)
 Παραδοσιακό μοντέλο:
 Τcomp = ops * CPU speed = 2.66*109 muls * 2 *10-9 sec/mul = 5.33sec
 Μοντέλο roofline:
 Tcomp = ops * max (CPU speed, 1/(ΟΙ * memory bandwidth)) =
2.66*109 muls * max (2 *10-9 sec/mul , (0,042 muls/byte* 4 *109 bytes /sec)-1) =
2.66*109 muls * max (2 *10-9 sec/mul , 5,95*10-9) = 15.9sec
24
Συστήματα Παράλληλης Επεξεργασίας
Χρόνος επικοινωνίας
 Χρόνος επικοινωνίας (point to point):
 Startup time (ts)
 Per-hop time (th)
 Per word transfer time (tw)
 Tcomm = ts + lth + mtw (l = number of hops, m = message size)
 Το lth είναι συνήθως μικρό και μπορεί να ενσωματωθεί στο ts, άρα:
 Tcomm = ts + mtw
 Χρόνος επικοινωνίας (broadcast σε P κόμβους)
 P διαφορετικά μηνύματα
 Tcomm = P(ts + mtw)
 Δενδρική υλοποίηση:
 Tcomm = log2P(ts + mtw)
25
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα:
Nearest-neighbor communication
 2 διάστατο υπολογιστικό χωρίο L1 * L2
 Κάθε επεξεργαστής επικοινωνεί με τους γειτονικούς του και
ανταλλάζει τις οριακές επιφάνειες
 Ποια τοπολογία επεξεργαστών ελαχιστοποιεί το κόστος
επικοινωνίας;
1D
26
2D
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα:
Nearest-neighbor communication
 Αριθμός επεξεργαστών: P = 100
 1D = 100*1
 2D = 10*10
 διπλή ακρίβεια (8 bytes)
 L1 =104, L2 = 103
 ts = 6*10-6 sec
 bandwidth = 500MB/sec → tw=1.9*10-9 sec/byte
 1D
 2 γείτονες, 1 μήνυμα ανά γείτονα, 2 μηνύματα ανά διεργασία
 Μέγεθος μηνύματος: m=8L2 = 8*103 bytes
 Tcomm = ts + mtw = 2 (6*10-6 sec + 8*103 bytes * 1.9*10-9 sec/byte) = 42.4usec
 2D
 4 μηνύματα ανά διεργασία
 m1=8L1 /10= 8*103 bytes, m2=8L2 /10= 8*102 bytes
 Tcomm = ts + mtw = 4 (6*10-6 sec) + 2(8*103 bytes * 1.9*10-9 sec/byte) + 2(8*102 bytes * 1.9*10-9
sec/byte) = 24us + 30,4us + 3,04us = 57,4us
27
Συστήματα Παράλληλης Επεξεργασίας
Χρόνος επικοινωνίας
(στον πραγματικό κόσμο)
 Συστήματα μεγάλης κλίμακας με χιλιάδες κόμβους, δεκάδες πυρήνες ανά
κόμβο
 Παράμετροι που επηρεάζουν την επικοινωνία:
 Μέγεθος μηνύματος
 Διαφορετικό bandwidth για μικρά/μεσαία/μεγάλα μηνύματα λόγω χρήσης
διαφορετικού πρωτοκόλλου δικτύου
 Τοπικός ανταγωνισμός στο εσωτερικό του κόμβου για πρόσβαση στο δίκτυο
 Ανταγωνισμός στο δίκτυο κορμού
 Μπορεί να οφείλεται και σε άλλες εφαρμογές!
 Απόσταση μεταξύ των κόμβων που επικοινωνούν
 Εξαρτάται από τη διάθεση κόμβων από τον scheduler του συστήματος
 Αριθμός μηνυμάτων
28
Συστήματα Παράλληλης Επεξεργασίας
Άεργος χρόνος
 Ο άεργος χρόνος μπορεί να μοντελοποιηθεί δύσκολα
 Προκύπτει συνήθως από ανισοκατανομή του φόρτου εργασίας (load
imbalance)
 Μπορεί να οφείλεται σε αναμονή για δεδομένα
 Σε αυτή την περίπτωση μπορεί να μοντελοποιηθεί σας μέρος του ts στο χρόνο
επικοινωνίας
 Συχνά δεν είναι απλό να διαχωριστεί από το χρόνο επικοινωνίας
 Π.χ. στην παρακάτω περίπτωση 2 διεργασιών που επικοινωνούν, δεν είναι ξεκάθαρο
ποιο κομμάτι του χρόνου θα πρέπει να χαρακτηριστεί ως άεργος χρόνος και ποιο ως
χρόνος επικοινωνίας
29
Συστήματα Παράλληλης Επεξεργασίας
Σχεδιασμός παράλληλων
προγραμμάτων
 Δεν υπάρχει αυστηρά ορισμένη διαδικασία για το σχεδιασμό και την
υλοποίηση παράλληλων προγραμμάτων
 “It’s more art than science”
 Μετρικές αξιολόγησης:
 Επίδοση του παραγόμενου κώδικα
 Επιτάχυνση
 Αποδοτικότητα
 Κλιμακωσιμότητα
 Παραγωγικότητα (code productivity)
 Χαμηλός χρόνος υλοποίησης
 Μεταφερσιμότητα (portability)
 Ευκολία στη συντήρηση (maintainability)
30
Συστήματα Παράλληλης Επεξεργασίας
Στάδια σχεδιασμού





4 βασικά στάδια (όχι τελείως ανεξάρτητα)
Στάδιο 1: Κατανομή υπολογισμών και δεδομένων
Στάδιο 2: Σχεδιασμός αλληλεπίδρασης ανάμεσα στα tasks
Στάδιο 3: Απεικόνιση των tasks σε διεργασίες (ή threads)
Στάδιο 4: Ενορχήστρωση της επικοινωνίας ή/και του συγχρονισμού
 Σημείωση: Πολλές από τις επιλογές σε κάθε στάδιο εξαρτώνται από την
τελική πλατφόρμα εκτέλεσης
31
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 1: Κατανομή υπολογισμών και
δεδομένων
 Στόχος: κατανομή των υπολογισμών και των δεδομένων σε επεξεργαστικά στοιχεία
 Τι να μοιράσω πρώτα; Υπολογισμούς ή δεδομένα;
 Προσέγγιση παραλληλοποίησης
 task centric: πρώτα μοιράζονται οι υπολογισμοί και βάσει αυτού τα δεδομένα
 data centric: πρώτα μοιράζονται τα δεδομένα, και βάσει αυτού οι υπολογισμοί
 Τελικά θα προκύψουν tasks και κατανομή δεδομένων
 Παράδειγμα: Πολλαπλασιασμός πινάκων (C = A * B)
 task centric: διαμοιρασμός των υπολογισμών με βάση τα γινόμενα διανυσμάτων,
δηλ. 1 task = ένα γινόμενο διανυσμάτων
 data centric: διαμοιρασμός των στοιχείων του πίνακα C, δηλ. 1 task = πράξεις που
χρειάζονται για τον υπολογισμό ενός στοιχείου Cij του πίνακα C
 Ειδική περίπτωση της task centric προσέγγισης είναι η function centric: η κατανομή
γίνεται με βάση τις συναρτήσεις (διαφορετικές λειτουργίες/στάδια)
 function centric: διαμοιρασμός των υπολογισμών ανά πράξη: 1 task = πολλαπλασιαμός, 1
task = πρόσθεση
32
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 1: Κατανομή υπολογισμών και
δεδομένων
 Επιλογή στρατηγικής ανάλογα με τον αλγόριθμο
 Η task centric προσέγγιση είναι η πιο γενική
 Οι task centric και data centric μπορεί να οδηγήσουν σε ακριβώς την ίδια
κατανομή
 Απαιτήσεις:
 Επίδοση
 Μεγιστοποίηση παραλληλίας
 Ελαχιστοποίηση επιβαρύνσεων λόγω διαχείρισης tasks, συγχρονισμού, επικοινωνίας
 Ισοκατανομή φορτίου
 Απλότητα
 Μικρός χρόνος υλοποίησης
 Ευκολία στην επέκταση και τη συντήρηση
 Ευελιξία (ανεξαρτησία από απαιτήσεις υλοποίησης)
33
Συστήματα Παράλληλης Επεξεργασίας
Αναλογία: παρασκευή πίτσας





Μάγειρας → Processing element
Υλικά (ζύμη, σάλτσα, τυρί,…) → data
Στόχος: παραλληλοποίηση της παρασκευής Ν ταψιών πίτσας
Υπόθεση: Συνεργάζονται >1 μάγειρες
task centric προσέγγιση:
 «μοιράζω τη δουλειά»
 1 task = παρασκευή 1 ταψιού πίτσας
 data centric προσέγγιση:
 «μοιράζω τα δεδομένα (υλικά)»
 η κατανομή της δουλειάς προκύπτει σαν φυσικό επακόλουθο του διαμοιρασμού των
δεδομένων
 μοιράζω τα υλικά σε τμήματα (σε Κ μέρη / ανά μάγειρα / ανά πίτσα, θα αποφασιστεί
αργότερα)
 function centric προσέγγιση:
 διαχωρίζω τις διαφορετικές δουλειές
 παρασκευή ζύμης, παρασκευή σάλτσας, προετοιμασία λοιπών υλικών, άπλωμα
ζύμης, τοποθέτηση σάλτσας, τοποθέτηση topping
34
Συστήματα Παράλληλης Επεξεργασίας
Rule of thumb
 Αλγόριθμοι σε κανονικές δομές δεδομένων (π.χ. regular computational grids,
αλγεβρικοί πίνακες) ευνοούν τη data centric κατανομή:
 Πολλαπλασιασμός πινάκων (γενικά βασικές αλγεβρικές ρουτίνες)
 Επίλυση γραμμικών συστημάτων
 Stencil computations
 Όταν μπορεί να εφαρμοστεί, η data centric προσέγγιση οδηγεί σε κομψές λύσεις:
δοκιμάζουμε πρώτα την data centric και αν δεν πετύχει, καταφεύγουμε στην task
centric
35
Συστήματα Παράλληλης Επεξεργασίας
Κατανομή κανονικών δομών
1-dimensional
2-dimensional
+ Απλή στην υλοποίηση
- Περιοριστική
(το task που προκύπτει εξαρτάται
από το Ν του πίνακα)
36
- Δυσκολότερη στην υλοποίηση
+ Πιο ευέλικτη
(ο προγραμματιστής ελέγχει το
μέγεθος του task)
Συστήματα Παράλληλης Επεξεργασίας
Rule of thumb
 H task centric προσέγγιση αποτελεί λύση για πιο δυναμικούς αλγορίθμους σε
ακανόνιστες δομές δεδομένων (irregular data structures)
 Αλγόριθμοι σε λίστες, δέντρα, γράφους, κλπ
 Αναδρομικοί αλγόριθμοι
 Event-based εφαρμογές
37
Συστήματα Παράλληλης Επεξεργασίας
Rule of thumb
 H function centric προσέγγιση μπορεί να υιοθετηθεί όταν υπάρχουν
διακριτές φάσεις και «ροή δεδομένων»
 Υπάρχει κάποιου είδους υποστήριξη στο υλικό για κάθε φάση
 Η παραλληλοποίηση σε κάθε φάση με την data centric προσέγγιση δεν οδηγεί σε
ικανοποιητική αξιοποίηση των πόρων (π.χ. δεν κλιμακώνει στο διαθέσιμο αριθμό
πυρήνων λόγω συμφόρησης στο διάδρομο μνήμης)
38
Συστήματα Παράλληλης Επεξεργασίας
Rule of thumb
 H function centric προσέγγιση μπορεί να υιοθετηθεί όταν υπάρχουν
διακριτές φάσεις και «ροή δεδομένων»
 Υπάρχει κάποιου είδους υποστήριξη στο υλικό για κάθε φάση
 Η παραλληλοποίηση σε κάθε φάση με την data centric προσέγγιση δεν οδηγεί σε
ικανοποιητική αξιοποίηση των πόρων (π.χ. δεν κλιμακώνει στο διαθέσιμο αριθμό
πυρήνων λόγω συμφόρησης στο διάδρομο μνήμης)
data centric:
π.χ. 32 threads ανά φάση
load image
scale image
filter image
display image
39
Συστήματα Παράλληλης Επεξεργασίας
Rule of thumb
 H function centric προσέγγιση μπορεί να υιοθετηθεί όταν υπάρχουν
διακριτές φάσεις και «ροή δεδομένων»
 Υπάρχει κάποιου είδους υποστήριξη στο υλικό για κάθε φάση
 Η παραλληλοποίηση σε κάθε φάση με την data centric προσέγγιση δεν οδηγεί σε
ικανοποιητική αξιοποίηση των πόρων (π.χ. δεν κλιμακώνει στο διαθέσιμο αριθμό
πυρήνων λόγω συμφόρησης στο διάδρομο μνήμης)
data centric:
π.χ. 32 threads ανά φάση
load image
scale image
filter image
display image
40
Συστήματα Παράλληλης Επεξεργασίας
Αν κάθε φάση κλιμακώνει μέχρι
τα 8 threads, έχουμε προφανή
σπατάλη πόρων
Rule of thumb
 H function centric προσέγγιση μπορεί να υιοθετηθεί όταν υπάρχουν
διακριτές φάσεις και «ροή δεδομένων»
 Υπάρχει κάποιου είδους υποστήριξη στο υλικό για κάθε φάση
 Η παραλληλοποίηση σε κάθε φάση με την data centric προσέγγιση δεν οδηγεί σε
ικανοποιητική αξιοποίηση των πόρων (π.χ. δεν κλιμακώνει στο διαθέσιμο αριθμό
πυρήνων λόγω συμφόρησης στο διάδρομο μνήμης)
load image (#4)
8 threads
scale image (#3)
8 threads
filter image (#2)
8 threads
display image (#1)
8 threads
41
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα: Εξίσωση θερμότητας
 Αλγόριθμος του Jacobi (2-διάστατο πλέγμα Χ * Υ)
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] +
A[step][i+1][j] + A[step][i][j-1] +
A[step][i][j+1])


Data centric
Μοιράζουμε τα δεδομένα ανά σημείο / γραμμή /
στήλη / μπλοκ
Κάθε task αναλαμβάνει να υπολογίσει την τιμή
σε κάθε διαμοιρασμένο δεδομένο





42
Task centric
1 task = υπολογισμός θερμότητας για κάθε
σημείο του χωρίου
1 task = υπολογισμός θερμότητας για κάθε
χρονικό βήμα
1 task = υπολογισμός θερμότητας για μία
γραμμή / στήλη / block του δισδιάστατου
πλέγματος για όλες τις χρονικές στιγμές
1 task = υπολογισμός θερμότητας για μία γραμμή
/ στήλη / block του δισδιάστατου πλέγματος για
μία χρονική στιγμή
Κατανομή δεδομένων: Κάθε task κατέχει (owns)
τα δεδομένα που γράφει
Συστήματα Παράλληλης Επεξεργασίας
Ανάθεση δεδομένων
 Τα δεδομένα του προβλήματος μπορούν να ανατεθούν ως:
 Μοιραζόμενα δεδομένα (shared data):
 Μπορεί να υποστηριχθεί μόνο από προγραμματιστικά μοντέλα κοινού χώρου
διευθύνσεων
 Αποτελεί ένα πολύ βολικό τρόπο «κατανομής»
 Χρειάζεται ιδιαίτερη πρόνοια όταν τα δεδομένα εγγράφονται από διαφορετικά tasks
(race conditions, ανάγκη συγχρονισμού)
 Κατανεμημένα δεδομένα (distributed data):
 Τα δεδομένα κατανέμονται ανάμεσα στα tasks
 Αποτελεί τη βασική προσέγγιση στα προγραμματιστικά μοντέλα ανταλλαγής
μηνυμάτων
 Επιβάλλει επιπλέον προγραμματιστικό κόστος
 Αντιγραμμένα δεδομένα (replicated data):
 Για αντιγραφή μικρών read-only δομών δεδομένων
 Για αντιγραφή υπολογισμών
43
Συστήματα Παράλληλης Επεξεργασίας
Ομαδοποίηση/παραμετροποίηση
tasks
 Η ομαδοποίηση των tasks κάνει τη συνέχεια της υλοποίησης πιο ευέλικτη
 Ανεξάρτητη από το μέγεθος του προβλήματος
 «Παραμετροποιήσιμη» (tunable) σε σχέση με τις απαιτήσεις της πλατφόρμας
εκτέλεσης
 Π.χ. στην εξίσωση διάχυσης η ομαδοποίηση tasks σε δύο διαστάσεις του χωρικού
πλέγματος παραμετρικά (π.χ. B1 * B2 αρχικά tasks δημιουργούν ένα νέο task) παρέχει
ευελιξία στη συνέχεια της υλοποίησης.
44
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 2: Σχεδιασμός
αλληλεπίδρασης ανάμεσα στα tasks
 Ανάγκη για αλληλεπίδραση:
 Δεδομένα που ανήκουν ή παράγονται σε ένα task πρέπει να προσπελαστούν
από ένα άλλο task
 Σε κοινά δεδομένα:
 Race condition: Το αποτέλεσμα της (παράλληλης) εκτέλεσης εξαρτάται από τη
σειρά με την οποία τα tasks προσπελαύνουν τα κοινά δεδομένα
 Π.χ. producer – consumer (counter++, counter--)
 critical section
 Εξάρτηση ανάμεσα σε tasks:
 Η σημασιολογικά ορθή εκτέλεση απαιτεί συγκεκριμένα σειρά πρόσβασης
στα δεδομένα
 ordering
 Σε κατανεμημένα δεδομένα:
 Ένα task χρειάζεται να διαβάσει δεδομένα που παράγει/κατέχει ένα άλλο task
 Δημιουργείται ανάγκη για επικοινωνία
45
Συστήματα Παράλληλης Επεξεργασίας
Εξαρτήσεις
 Εξαρτήσεις δεδομένων υπάρχουν ήδη από το σειριακό πρόγραμμα
 Εξάρτηση υπάρχει όταν 2 εντολές αναφέρονται στα ίδια δεδομένα (θέση
μνήμης)
 4 είδη εξαρτήσεων




Read-After-Write (RAW) ή true dependence
Write-After-Read (WAR) ή anti dependence
Write-After-Write (WAW) ή output dependence
Read-After-Read (not really a dependence)
 Η παράλληλη εκτέλεση πρέπει να σεβαστεί τις εξαρτήσεις του προβλήματος
 Η κατανομή των δεδομένων στα tasks δημιουργεί κατά κανόνα εξαρτήσεις
ανάμεσα στα tasks (π.χ. το task1 πρέπει να διαβάσει δεδομένα που παράγει
το task2)
46
Συστήματα Παράλληλης Επεξεργασίας
Γράφος εξαρτήσεων
(task dependence graph)
 Ή απλά task graph
 Κορυφές: tasks
 Label κορυφής: κόστος υπολογισμού του task
 Ακμές: εξαρτήσεις ανάμεσα στα tasks
 Βάρος ακμής: όγκος δεδομένων που πρέπει να μεταφερθούν (στην
περίπτωση της επικοινωνίας)
47
Συστήματα Παράλληλης Επεξεργασίας
Task graphs: βασικές ιδιότητες
 Τ1: Συνολική εργασία (work), ο χρόνος που
απαιτείται για την εκτέλεση σε 1 επεξεργαστή
 Tp: Χρόνος εκτέλεσης σε p επεξεργαστές
 Κρίσιμο μονοπάτι (critical path): Το μέγιστο
μονοπάτι ανάμεσα στην πηγή και τον προορισμό
του γράφου
 T ∞ : Χρόνος εκτέλεσης σε ∞ επεξεργαστές (span)
και χρόνος εκτέλεσης του κρίσιμου μονοπατιού
 Ισχύει:
 Tp ≥ T1 / p
 Tp ≥ T∞
 Μέγιστο speedup T1 / T∞
48
Συστήματα Παράλληλης Επεξεργασίας
Εξαρτήσεις στην εξίσωση θερμότητας
 1 task = υπολογισμός θερμότητας για κάθε σημείο του χωρίου
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] + A[step][i+1][j]
+ A[step][i][j-1] + A[step][i][j+1])
49
Συστήματα Παράλληλης Επεξεργασίας
Εξαρτήσεις στην εξίσωση θερμότητας
 1 task = υπολογισμός θερμότητας για κάθε χρονικό βήμα
Δεν υπάρχουν ταυτόχρονα tasks!
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] + A[step][i+1][j]
+ A[step][i][j-1] + A[step][i][j+1])
50
Συστήματα Παράλληλης Επεξεργασίας
Εξαρτήσεις στην εξίσωση θερμότητας
 1 task = υπολογισμός θερμότητας για μία γραμμή του δισδιάστατου
πλέγματος για όλες τις χρονικές στιγμές
Δεν υπάρχει έγκυρη παράλληλη εκτέλεση!
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] + A[step][i+1][j]
+ A[step][i][j-1] + A[step][i][j+1])
51
Συστήματα Παράλληλης Επεξεργασίας
Εξαρτήσεις στην εξίσωση θερμότητας
 1 task = υπολογισμός θερμότητας για μία γραμμή του δισδιάστατου
πλέγματος για μία χρονική στιγμή
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] + A[step][i+1][j]
+ A[step][i][j-1] + A[step][i][j+1])
52
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 3: Απεικόνιση των tasks σε
διεργασίες (ή threads)
 O τρόπος με τον οποίο ανατίθενται τα tasks σε οντότητες εκτέλεσης (διεργασίες ή
νήματα) μπορεί να επηρεάσει δραματικά την εκτέλεση:
 Παραλληλισμός
 Τοπικότητα δεδομένων
 Κόστος συγχρονισμού και επικοινωνίας
53
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 3: Απεικόνιση των tasks σε
διεργασίες (ή threads)
 O τρόπος με τον οποίο ανατίθενται τα tasks σε οντότητες εκτέλεσης (διεργασίες ή
νήματα) μπορεί να επηρεάσει δραματικά την εκτέλεση:
 Παραλληλισμός
 Τοπικότητα δεδομένων
 Κόστος συγχρονισμού και επικοινωνίας
54
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 3: Απεικόνιση των tasks σε
διεργασίες (ή threads)
 O τρόπος με τον οποίο ανατίθενται τα tasks σε οντότητες εκτέλεσης (διεργασίες ή
νήματα) μπορεί να επηρεάσει δραματικά την εκτέλεση:
 Παραλληλισμός
 Τοπικότητα δεδομένων
 Κόστος συγχρονισμού και επικοινωνίας
55
Συστήματα Παράλληλης Επεξεργασίας
Στατική vs. Δυναμική απεικόνιση
tasks
 Στατική απεικόνιση:
 Διαμοιρασμός των tasks σε threads πριν την έναρξη της εκτέλεσης
 Καλή πρακτική: Αν η εφαρμογή το επιτρέπει, συνηθίζουμε να έχουμε 1 task /
thread (προσαρμόζοντας κατάλληλα το σχεδιασμό μας και στο Στάδιο 1)
 Κατάλληλη στρατηγική για εφαρμογές με:
 ομοιόμορφη και γνωστή εξαρχής κατανομή φορτίου
 ανομοιόμορφη αλλά προβλέψιμη κατανομή φορτίου
 Πλεονεκτήματα :
 Απλή στην υλοποίηση
 Καλή επίδοση για «κανονικές εφαρμογές»
 Μηδενικό overhead
 Μειονεκτήματα:
 Κακή επίδοση για δυναμικές και ακανόνιστες εφαρμογές
56
Συστήματα Παράλληλης Επεξεργασίας
Στατική vs. Δυναμική απεικόνιση
tasks
 Δυναμική απεικόνιση:
 Διαμοιρασμός των tasks σε threads κατά την εκτέλεση
 Κατάλληλη στρατηγική για εφαρμογές με:
 μη προβλέψιμο φορτίο
 δυναμικά δημιουργούμενα tasks
 Πλεονεκτήματα:
 Εξισορρόπηση φορτίου σε δυναμικές και ακανόνιστες εφαρμογές
 Μειονεκτήματα:
 Δύσκολη στην υλοποίηση (συνήθως το αναλαμβάνει το run-time σύστημα)
 Μπορεί να δημιουργήσει bottleneck σε περίπτωση υλοποίησης με ένα κεντρικό
scheduling thread (απαιτούνται κατανεμημένοι αλγόριθμοι)
57
Συστήματα Παράλληλης Επεξεργασίας
Σχετικά ζητήματα απεικόνισης
(δρομολόγησης)
 Δρομολόγηση εργασιών σε ένα υπερυπολογιστικό σύστημα
 N κόμβοι, c πυρήνες ανά κόμβο
 Κ jobs, κάθε job i ζητάει Νi κόμβους και ci πύρήνες
 Στατικές προσεγγίσεις
 Δρομολόγηση παράλληλων εφαρμογών σε επίπεδο λειτουργικού
 Πολυπύρηνο σύστημα
 Κ εφαρμογές με διαφορετικός αριθμό από threads η κάθε μία
 Οι τρέχουσες προσεγγίσεις δεν είναι ικανοποιητικές
 Δρομολόγηση των tasks μίας παράλληλης εφαρμογής σε ένα πολυπύρηνο
σύστημα
 Επαναλήψεις ενός παράλληλου loop
 Tasks μίας παράλληλης εφαρμογής
58
Συστήματα Παράλληλης Επεξεργασίας
data centric, στατική απεικόνιση
1-dim
sequential
59
2-dim
(block)
cyclic
sequential
Συστήματα Παράλληλης Επεξεργασίας
cyclic
Παράδειγμα: Επιλογή
απεικόνισης για LU και stencil
//LU decomposition kernel
for(k=0; k<N-1; k++)
for(i=k+1; i<N; i++){
L[i] = A[i][k] / A[k][k];
for(j=k+1; j<N; j++)
A[i][j]=A[i][j]-L[i]*A[j][i];
}
//stencil
for (t=1; t<T; t++){
for (i=1; i<X; i++)
for (j=1; j<Y; j++)
A[t][i][j] = 0.2*(A[t-1][i][j] + A[t-1][i-1][j] +
A[t-1][i+1][j] + A[t-1][i][j-1] +
A[t-1][i][j]);
}
60
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 4: Ενορχήστρωση της
επικοινωνίας ή/και του συγχρονισμού
 Η κατανομή των υπολογισμών και των δεδομένων δημιουργεί ανάγκες για
επικοινωνία και συγχρονισμό
 Επικοινωνία:
 Κατανεμημένα δεδομένα
 1 task χρειάζεται να διαβάσει δεδομένα που κατέχει ένα άλλο task
 Σημείο-προς-σημείο και συλλογική
 Συγχρονισμός:
 Διατήρηση των εξαρτήσεων: σειριοποίηση μεταξύ tasks
 Αμοιβαίος αποκλεισμός: ελεγχόμενη πρόσβαση σε shared δεδομένα
 Τυπικά patterns συγχρονισμού:




61
critical section
ordering
barrier
readers – writers
Συστήματα Παράλληλης Επεξεργασίας
Στάδιο 4: Ενορχήστρωση της
επικοινωνίας ή/και του συγχρονισμού
 Συχνή επικοινωνία / συγχρονισμός μπορούν να «σκοτώσουν» την επίδοση
ενός παράλληλου προγράμματος
 Βελτιστοποίηση επικοινωνίας
 Κατάλληλη κατανομή δεδομένων → μείωση αναγκών επικοινωνίας
 Επικάλυψη υπολογισμών-επικοινωνίας
 Ζητήματα συγχρονισμού
 Δύσκολη υλοποίηση ορθά συγχρονισμένων προγραμμάτων
 Κόστος εκτέλεσης: fine-grain vs coarse-grain συγχρονισμός
 Εναλλακτικές προσεγγίσεις:
 Non-blocking data structures
 Transactional memory
62
Συστήματα Παράλληλης Επεξεργασίας
Σύνοψη σχεδιασμού παράλληλων
προγραμμάτων
 Δεν υπάρχει ξεκάθαρη μεθοδολογία παραλληλοποίησης προγραμμάτων
 Δύο σημαντικά βήματα (συχνά όχι σειριακά):
 Σχεδιασμός
 Αναζήτηση παραλληληλίας (κατανομή υπολογισμού και δεδομένων σε tasks)
 Δεν λαμβάνονται ιδιαίτερα υπόψη τα εργαλεία προγραμματισμού και η πλατφόρμα
εκτέλεσης
 Υλοποίηση
 Έκφραση παραλληλίας
 Επιλογή προγραμματιστικού μοντέλου και εργαλείων
 Λαμβάνεται υπόψη η πλατφόρμα εκτέλεσης
 2 βασικές προσεγγίσεις σχεδιασμού:
 task centric: κατανέμονται πρώτα οι υπολογισμοί και μετά τα δεδομένα
 data centric: κατανέμονται πρώτα τα δεδομένα και μετά οι υπολογισμοί
 Σημαντική προσέγγιση: functional parallelism (υποπερίπτωση του task parallelism)
 Επιλογή προσέγγισης ανάλογα με τα χαρακτηριστικά της εφαρμογής
63
Συστήματα Παράλληλης Επεξεργασίας
«Μιλώντας» παράλληλα
 Πρώτο βήμα: σχεδιασμός παράλληλων προγραμμάτων = σκέψη
 Δεύτερο βήμα: υλοποίηση παράλληλων προγραμμάτων = ομιλία
 Όπως και στις φυσικές γλώσσες, η σκέψη και η ομιλία είναι δύο στενά
συνδεδεμένες λειτουργίες
 Ερώτημα 1: Τι προγραμματιστικές δομές χρειάζομαι για να μιλήσω
παράλληλα;
 Ερώτημα 2: Τι υποστήριξη χρειάζεται (από την αρχιτεκτονική, το
λειτουργικό, τη γλώσσα προγραμματισμού, τη βιβλιοθήκη χρόνου
εκτέλεσης της γλώσσας) για να υλοποιηθούν οι παραπάνω δομές με
αποδοτικό τρόπο;
 2 κρίσιμα ζητήματα απόδοσης
 Υψηλή επίδοση του παραγόμενου κώδικα (performance)
 Γρήγορη και εύκολη υλοποίηση (productivity)
64
Συστήματα Παράλληλης Επεξεργασίας
Προγραμματιστικά μοντέλα
 Κοινού χώρου διευθύνσεων




Υποστηρίζει κοινά δεδομένα ανάμεσα στα νήματα
Επιταχύνει τον προγραμματισμό
Μπορεί να οδηγήσει σε δύσκολα ανιχνεύσιμα race conditions
Δεν μπορεί να υλοποιηθεί αποδοτικά σε πλατφόρμες που δεν παρέχουν
πρόσβαση σε κοινή μνήμη στο υλικό
 Κατάλληλο για συστήματα κοινής μνήμης
 Περιορισμένος συνολικός αριθμός νημάτων
 Ανταλλαγής μηνυμάτων
 Κάθε διεργασία (νήμα) βλέπει μόνο τα δικά της δεδομένα
 Τα δεδομένα μπορεί να είναι μόνο distributed ή replicated
 Οδηγεί σε χρονοβόρο προγραμματισμό ακόμα και για απλά προγράμματα
(fragmented κώδικας)
 Μπορεί να υποστηριχθεί από πολύ μεγάλης κλίμακας συστήματα
 Υβριδικό: συνδυασμός των παραπάνω 2
65
Συστήματα Παράλληλης Επεξεργασίας
Παράλληλες προγραμματιστικές δομές
 Με αύξουσα ανάγκη σε υποστήριξη από το run-time σύστημα
της γλώσσας
SPMD
parallel for
fork / join
Task graphs
66
Συστήματα Παράλληλης Επεξεργασίας
SPMD
SPMD = Single program multiple data
Όλες οι διεργασίες εκτελούν το ίδιο τμήμα κώδικα
Κάθε διεργασία έχει το δικό της σύνολο δεδομένων
Το αναγνωριστικό της διεργασίας χρησιμοποιείται για να διαφοροποιήσει
την εκτέλεσή της
 Αποτελεί ευρύτατα διαδεδομένη προγραμματιστική τεχνική για παράλληλα
προγράμματα
 Έχει υιοθετηθεί από το MPI




67
Συστήματα Παράλληλης Επεξεργασίας
SPMD
 Ταιριάζει σε εφαρμογές όπου εκτελούνται όμοιες λειτουργίες σε
διαφορετικά δεδομένα (data parallelism)
 Απαιτεί σχήματα συγχρονισμού και ανταλλαγής δεδομένων μεταξύ των
διεργασιών
 Σε πρωτόγονο επίπεδο τα παραπάνω παρέχονται από το λογισμικό
συστήματος
 Το μοντέλο SPMD μπορεί να υλοποιηθεί χωρίς επιπρόσθετη υποστήριξη
 Παρόλα αυτά το MPI διευκολύνει τον προγραμματισμό παρέχοντας μη
πρωτόγονες ρουτίνες και ανεξαρτησία από την πλατφόρμα εκτέλεσης
 Θεωρείται κοπιαστική προσέγγιση (non-productive) καθώς τα αφήνει
(σχεδόν) όλα στον προγραμματιστή
 Μπορεί να οδηγήσει σε υψηλή επίδοση καθώς ο προγραμματιστής έχει τον
(σχεδόν) πλήρη έλεγχο της υλοποίησης
68
Συστήματα Παράλληλης Επεξεργασίας
Βήματα υλοποίησης στο σχήμα SPMD
 Αρχικοποίηση
 Λήψη αναγνωριστικού
 Εκτέλεση του ίδιου κώδικα σε όλους τους κόμβους και
διαφοροποίηση ανάλογα με το αναγνωριστικό
 Εναλλακτικές ροές ελέγχου
 Ανάληψη διαφορετικών επαναλήψεων σε βρόχο
 Κατανομή δεδομένων
 Τερματισμός
69
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα: εξίσωση θερμότητας
for (steps=0; steps < T; steps++)
for (i=1; i<X-1; i++)
for (j=1; j<Y-1, j++)
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] +
A[step][i+1][j] + A[step][i][j-1] +
A[step][i][j+1])
myid = get_my_id_from_system();
chunk = X / NUM_PRCS; // υποθέτει X % NUM_PRCS == 0
mystart = myid*chunk + 1;
myend = myend = mystart + chunk;
for (steps=0; steps < T; steps++){
for (i=mystart; i<myend; i++)
for (j=1; j<Y-1, j++)
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] +
A[step][i+1][j] + A[step][i][j-1] +
A[step][i][j+1])
synchronize_or_communicate(…);
}
70
Συστήματα Παράλληλης Επεξεργασίας
parallel for
 Η παραλληλοποίηση των for-loops αποτελεί σημαντικότατη προσέγγιση στο
σχεδιασμό ενός παράλληλου προγράμματος
 Όπως είδαμε, μπορεί να επιτευχθεί στο μοντέλο SPMD αλλά για
προγραμματιστική ευκολία έχει ενσωματωθεί σε γλώσσες και εργαλεία:
 OpenMP
 Cilk
 ΤΒΒs
 PGAS
 Χρειάζεται υποστήριξη από το σύστημα
 Αυτόματη μετάφραση του parallel for σε κώδικα
 Διαχείριση των δεδομένων
 Δρομολόγηση των νημάτων/εργασιών
 Είναι ευθύνη του προγραμματιστή να αποφασίσει αν ένα loop είναι
παράλληλο
71
Συστήματα Παράλληλης Επεξεργασίας
automatic parallelization
 Η εύρεση των παράλληλων for αποτελεί τον κυριότερο στόχο της
αυτόματης παραλληλοποίησης
 Ειδικά περάσματα optimizing compilers αναζητούν:
 Αν ένα loop είναι παράλληλο
 Αν αξίζει να παραλληλοποιηθεί
 Η “απόδειξη” της παραλληλίας ενός loop είναι πολύ δύσκολη και βασίζεται
στα λεγόμενα dependence tests
72
Συστήματα Παράλληλης Επεξεργασίας
dependence analysis
 Πότε ένα loop είναι παράλληλο;
 Όταν δεν υπάρχουν εξαρτήσεις ανάμεσα στις επαναλήψεις του
 Τέλεια φωλιασμένοι βρόχοι:
for i1 = 1 to U1
for i2 = 1 to U2
…
for in = 1 to Un
…
 Διανύσματα εξαρτήσεων d εκφράζουν τις εξαρτήσεις σε κάθε επίπεδο του
φωλιάσματος
 Πίνακας εξαρτήσεων D, περιέχει κατά στήλες τα διανύσματα εξάρτησης
 Διανύσματα απόστασης (distance vectors)
 Στοιχεία του πίνακα D dij είναι σταθεροί ακέραιοι αριθμοί
 Διανύσματα κατεύθυνσης (direction vectors):
 > (υπάρχει εξάρτηση από προσβάσεις στη μνήμη προηγούμενων επαναλήψεων)
 < (υπάρχει εξάρτηση από προσβάσεις στη μνήμη επόμενων επαναλήψεων)
 * (υπάρχει εξάρτηση από προσβάσεις στη μνήμη προηγούμενων ή επόμενων επαναλήψεων)
73
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα: εξίσωση θερμότητας
for (steps=0; steps < T; steps++)
for (i=1; i<X-1; i++)
for (j=1; j<Y-1, j++)
A[step+1][i][j] = 1/5 (A[step][i][j] + A[step][i-1][j] +
A[step][i+1][j] + A[step][i][j-1] +
A[step][i][j+1])
1 1 1 1 1 
D = 0 1 − 1 0 0 
0 0 0 1 − 1
74
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα: Floyd-Warshall
for (k=0; k<N; k++)
for (i=0; i<N; i++)
for (j=0; j<N, j++)
A[(k+1)%2][i][j] = min(A[k%2][i][j], A[k%2][i][k] + A[k%2][k][j])
1 1 1
D = 0 0 *
0 * 0
75
Συστήματα Παράλληλης Επεξεργασίας
Κανόνες παραλληλίας loop
 Ένας βρόχος στο επίπεδο i ενός φωλιασμένου βρόχου είναι
παράλληλος αρκεί να ισχύει οτιδήποτε από τα παρακάτω:
1. το i-οστό στοιχείο ΟΛΩΝ των διανυσμάτων εξάρτησης είναι 0
2. ΟΛΑ τα υποδιανύσματα από 0 εως i-1 να είναι λεξικογραφικά
ΘΕΤΙΚΑ (= το πρώτο μη μηδενικό στοιχείο είναι θετικό)
 Επισήμανση: Για τον εξωτερικότερο βρόχο (i=0) μπορεί να
εφαρμοστεί μόνο ο πρώτος κανόνας (δεν υπάρχουν
υποδιανύσματα από 0 εως -1)
 Άσκηση: Ποια loops παραλληλοποιούνται στην εξίσωση
θερμότητας και στον αλγόριθμο FW?
76
Συστήματα Παράλληλης Επεξεργασίας
fork / join




Αφορά εφαρμογές με δυναμική ανάγκη για δημιουργία / τερματισμό tasks
Τα tasks δημιουργούνται (fork) και τερματίζονται (join) δυναμικά
Π.χ. αλγόριθμος σχεδιασμένος με την Divide and Conquer στρατηγική
OpenMP tasks
 #pragma omp task
 #pragma omp taskwait
 Cilk
 spawn
 sync
77
Συστήματα Παράλληλης Επεξεργασίας
Παράδειγμα fork - join
A
B
C
D
E
F
G
78
#pragma omp parallel
{
#pragma omp single
{
#pragma omp task A();
#pragma omp task if (0)
{
#pragma omp task B();
#pragma omp task if (0)
{
#pragma omp task C();
D();
#pragma omp taskwait
E();
}
#pragma omp taskwait
F();
}
#pragma omp taskwait
G();
}
}
Συστήματα Παράλληλης Επεξεργασίας
Task graphs
 Η fork-join δομή δεν μπορεί να περιγράψει όλα τα task graphs
 Όταν ένα task graph είναι γνωστό στατικά, τότε μπορούμε να
το περιγράψουμε άμεσα
79
Συστήματα Παράλληλης Επεξεργασίας
graph g;
source_node s;
//source node
Παράδειγμα task graph
//each node executes a different function body
node a( g, body_A() );
node b( g, body_B() );
node c( g, body_C() );
node d( g, body_D() );
node e( g, body_E() );
node f( g, body_F() );
node h( g, body_H() );
node i( g, body_I() );
node j( g, body_J() );
//create edges
make_edge( s, a
make_edge( s, b
make_edge( s, c
make_edge( a, d
make_edge( b, e
make_edge( c, f
make_edge( d, h
make_edge( e, h
make_edge( f, i
make_edge( h, j
make_edge( i, j
);
);
);
);
);
);
);
);
);
);
);
s.start(); // start parallel execution of task graph
g.wait_for_all(); //wait for all to complete
80
Συστήματα Παράλληλης Επεξεργασίας
POSIX threads
 Αποτελούν πρωτόγονο τρόπο πολυνηματικού προγραμματισμού για
systems programming
 Συνδυαζόμενα με TCP/IP sockets αποτελούν την πιο βασική πλατφόρμα
εργαλείων για παράλληλο προγραμματισμό
 SPMD ή Master / Slave
 + : ο χρήστης έχει απόλυτο έλεγχο της εκτέλεσης
 - : ιδιαίτερα κοπιαστικός και επιρρεπής σε σφάλματα τρόπος
προγραμματισμού
81
Συστήματα Παράλληλης Επεξεργασίας
MPI
 Μοντέλο ανταλλαγής μηνυμάτων για συστήματα κατανεμημένης μνήμης
 Αποτελεί τον de facto τρόπο προγραμματισμού σε υπερυπολογιστικά
συστήματα
 SPMD (και Master / Slave)
 Απλοποιεί την υλοποίηση της επικοινωνίας σε σχέση με τη βιβλιοθήκη των
sockets καθώς υποστηρίζει μεγάλο αριθμό από χρήσιμες ρουτίνες
 Βελτιστοποιεί την επικοινωνία (κυρίως σε collective επικοινωνία)
 Ο χρήστης αναλαμβάνει το διαμοιρασμό των δεδομένων και την
επικοινωνία μέσω μηνυμάτων
 “fragmented” τρόπος προγραμματισμού
82
Συστήματα Παράλληλης Επεξεργασίας
OpenMP
 Προγραμματιστικό εργαλείο που βασίζεται σε οδηγίες (directives) προς το
μεταγλωττιστή
 Αφορά κατά κύριο λόγο αρχιτεκτονικές κοινής μνήμης
 Μπορεί να αξιοποιηθεί για την εύκολη παραλληλοποίηση ήδη υπάρχοντος
σειριακού κώδικα
 Παρέχει ευελιξία στο προγραμματιστικό στυλ:
 SPMD
 Master / Workers
 parallel for
 Fork / Join (ενσωμάτωση των tasks, 2008)
83
Συστήματα Παράλληλης Επεξεργασίας
Cilk
 Πολυνηματικός προγραμματισμός για αρχιτεκτονικές κοινής μνήμης
 Επεκτείνει τη C με λίγες επιπλέον λέξεις κλειδιά
 Κάθε πρόγραμμα γραμμένο σε Cilk έχει ορθή σειριακή σημασιολογία (μπορεί να εκτελεστεί
σωστά σειριακά)
 Σχεδιασμός προγραμμάτων με χρήση αναδρομής
 Σχήμα Fork / Join
 Υποστήριξη parallel for
 Βασικές λέξεις κλειδιά: cilk, spawn, sync
C
void vadd (real *A, real *B, int n){
int i; for (i=0; i<n; i++) A[i]+=B[i];
}
Cilk
cilk void vadd (real *A, real *B, int n){
if (n<=BASE) {
int i; for (i=0; i<n; i++) A[i]+=B[i];
} else {
spawn vadd (A, B, n/2;
spawn vadd (A+n/2, B+n/2, n-n/2;
} sync;
}
Συστήματα Παράλληλης Επεξεργασίας
84
CUDA
 Compute Unified Device Architecture
 Παράλληλη αρχιτεκτονική που
προτάθηκε από την NVIDIA
 Βασίζεται σε GPUs (GP-GPUs =
General Purpose-Graphical
processing Units)
 Προγραμματισμός: C extensions για
αρχιτεκτονικές CUDA
 Ανάθεση υπολογιστικά απαιτητικών
τμημάτων του κώδικα στην κάρτα
γραφικών
 GPU = accelerator
 massively data parallel
 Manycore system
85
Συστήματα Παράλληλης Επεξεργασίας
Προγραμματισμός σε περιβάλλον
CUDA




SIMT = Single Instruction Multiple Threads
Τα threads δρομολογούνται σε ομάδες που λέγονται warps
Το κόστος δρομολόγησης των threads είναι μηδενικό
Σε κάθε κύκλο όλα τα threads εκτελούν την ίδια εντολή
 Εκτελούνται όλα τα control paths
 Τα μη έγκυρα control paths ματαιώνονται (aborted) στο τέλος
 Οι αλγόριθμοι πρέπει να σχεδιάζονται με data parallel λογική
 Τα branches και ο συγχρονισμός κοστίζουν
 Η χωρική τοπικότητα αξιοποιείται κατά μήκος των threads και όχι εντός
μιας CPU όπως γίνεται στους συμβατικούς επεξεργαστές
 Αρκετά «σκιώδη» ζητήματα επηρεάζουν την επίδοση και χρήζουν
ιδιαίτερης προσοχής
 Παραλληλισμός
 Πρόσβαση στα δεδομένα
 Συγχρονισμός
86
Συστήματα Παράλληλης Επεξεργασίας
Γλώσσες PGAS
 Partitioned Global Address Space
 Προσπαθεί να έχει τα θετικά και από τους δύο κόσμους:
 Προγραμματιστική ευκολία όπως το μοντέλο του κοινού χώρου διευθύνσεων
 Επίδοση και κλιμακωσιμότητα όπως το μοντέλο της ανταλλαγής μηνυμάτων
 Υποθέτει καθολικό χώρο διευθύνσεων (global address space) που κατανέμεται
(partitioned) στις τοπικές μνήμες των επεξεργαστών ενός συστήματος
κατανεμημένης μνήμης
 Απαιτεί πολύ ισχυρό run-time σύστημα
 Για προσβάσεις σε δεδομένα που βρίσκονται σε απομακρυσμένη μνήμη
χρησιμοποιεί 1-sided communication
 Υλοποιήσεις:





87
UPC
Fortress
Co-array Fortrean
X10
Chapel
Συστήματα Παράλληλης Επεξεργασίας
Languages and tools
SPMD
MPI
√
OpenMP
√
Task graph
Cilk
TBB
√
CUDA
√
88
√
Συστήματα Παράλληλης Επεξεργασίας
parallel for
fork / join
√
√
√ (Cilk++)
√
√
√
Αλληλεπίδραση με το υλικό:
κοινή μνήμη
 Κρίσιμος πόρος: ιεραρχία μνήμης
 Οργάνωση μνήμης (UMA / NUMA) και κρυφών μνημών (επίπεδα διαμοιράσματος)
 Συνάφεια κρυφής μνήμης (cache coherence)
 Διαμοιρασμός δεδομένων:
 true sharing
 false sharing
 cache coherence overheads
 Σε κοινή cache:
 Constructive sharing
 Destructive sharing
 Συγχρονισμός:
 Critical sections: περιορισμός παραλληλίας
 Lock contention
 Locking overhead
 Κορεσμός του διαδρόμου μνήμης
 Ανταγωνισμός για τη μνήμη πολλών νημάτων μπορεί να περιορίσει την κλιμακωσιμότητα
89
Συστήματα Παράλληλης Επεξεργασίας
Αλληλεπίδραση με το υλικό:
κατανεμημένη μνήμη
 Κρίσιμος πόρος: δίκτυο διασύνδεσης
 Κατανομή δεδομένων
 Παραλληλία
 Συνολική δουλειά
 Επικοινωνία
 Τεχνικές μείωσης του κόστους επικοινωνίας




Coarse-grain (bulk) communication
Point-to-point vs. collective
Overlapping
Communication avoiding algorithms
 Διαμοιρασμός πόρων σε υβριδικά συστήματα
 Π.χ. σε ένα σύστημα με Ν κόμβους και c πυρήνες σε κάθε κόμβο, πόσες MPI
διεργασίες και OpenMP threads/διεργασία πρέπει να επιλέξω;
90
Συστήματα Παράλληλης Επεξεργασίας