Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Παρουσίαση 2 ης Άσκησης: Ανάπτυξη παράλληλου κώδικα και μελέτη επίδοσης του αλγόριθμου FW σε μοντέρνες πολυπύρηνες αρχιτεκτονικές Ακ. Έτος 2016-2017 9 ο Εξάμηνο
Αλγόριθμος Floyd-Warshall (FW) l Εύρεση ελάχιστου μονοπατιού ανάμεσα σε οποιοδήποτε ζεύγος κόμβων ενός κατευθυνόμενου γράφου (τα βάρη των ακμών μπορούν να είναι και αρνητικά). for (k=0; k<n; k++) for (i=0; i<n; i++) for (j=0; j<n; j++) A[i][j] = min(a[i][j], A[i][k]+A[k][j]); l l l Για κάθε χρονικό βήμα k υπολογίζει για κάθε ζεύγος κόμβων i-j αν υπάρχει συντομότερο μονοπάτι από τον i προς τον j περνώντας από το κόμβο k N: αριθμός κόμβων του γράφου Α: πίνακας διπλανών κορυφών (αν i,j δεν συνδέονται τότε Α[i][j] = αρχικά) l Πολυπλοκότητα: Θ(n 3 ) 2
Ακ. Έτος 2010-2011 Παράδειγμα: γράφος 8 κόμβων
Ακ. Έτος 2010-2011 Παράδειγμα: γράφος 8 κόμβων
Ακ. Έτος 2010-2011 Παράδειγμα: γράφος 8 κόμβων
Σειριακή και παράλληλη εκτέλεση l Για μεγάλα Ν (ο Α δεν χωράει στην cache), ο FW είναι memory bound: Ο πίνακας Α πρέπει να μεταφέρεται από την κύρια μνήμη σε κάθε επανάληψη k Οι πράξεις που γίνονται είναι πολύ απλές (σύγκριση / πρόσθεση) σε ακέραιους ή πραγματικούς απλής ακρίβειας l Παράλληλη εκτέλεση: Τα loops i, j είναι παράλληλα Ο αλγόριθμος δεν κλιμακώνει καλά σε αρχιτεκτονικές κοινής μνήμης 6
l J.-S. Park, M. Penner, and V. K. Prasanna, Optimizing Graph Algorithms for Improved Cache Performance, IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS, VOL. 15, NO. 9, SEPTEMBER 2004. FWR (A, B, C) if (base case) FWI (A, B, C) else FWR (A 11, B 11, C 11 ); FWR (A 12, B 11, C 12 ); FWR (A 21, B 21, C 11 ); FWR (A 22, B 21, C 12 ); FWR (A 22, B 21, C 12 ); FWR (A 21, B 21, C 11 ); FWR (A 12, B 11, C 12 ); FWR (A 11, B 11, C 11 ); FWI (A, B, C) for (k=0; k<n; k++) for (i=0; i<n; i++) for (j=0; j<n; j++) A[i][j] = min(a[i][j], B[i][k]+C[k][j]); l Καλείται ως: FWR(A, A, A); 7
A 00 A 01 A 10 A 11 8
A 00 A 01 A 10 A 11 9
A 00 A 01 A 10 A 11 10
A 00 A 01 A 10 A 11 11
A 00 A 01 A 10 A 11 12
A 00 A 01 A 10 A 11 13
A 00 A 01 A 10 A 11 14
A 00 A 01 A 10 A 11 15
A 00 A 01 A 10 A 11 16
FWR (A, B, C) if (base case) FWI (A, B, C) else FWR (A 00, B 00, C 00 ); FWR (A 01, B 00, C 01 ); FWR (A 10, B 10, C 00 ); FWR (A 11, B 10, C 01 ); FWR (A 11, B 10, C 01 ); FWR (A 10, B 10, C 00 ); FWR (A 01, B 00, C 01 ); FWR (A 00, B 00, C 00 ); 1 2 3 4 5 6 Παραλληλία 17
tiled 1 2 2 2 2 3 3 3 2 3 3 3 6 5 6 6 2 3 3 3 5 4 5 5 6 5 6 6 9 9 8 9 6 5 6 6 9 9 8 9 8 8 7 8 12 12 12 11 9 8 9 12 12 12 11 12 12 12 11 11 11 11 10 18
l sandman: 4 x Intel Xeon E5-4620 (Sandy Bridge) Συνολικά 32 πυρήνες (και 64 threads) Περιβάλλον εκτέλεσης Core 0 Core 1 Core 2 Core 3 Core 0 Core 1 Core 2 Core 3 (NUMA Node 0) 64GB RAM L3 16MiB L3 16MiB (NUMA Node 1) 64GB RAM Core 4 Core 5 Core 6 Core 7 Core 4 Core 5 Core 6 Core 7 Core 0 Core 1 Core 2 Core 3 Core 0 Core 1 Core 2 Core 3 (NUMA Node 2) 64GB RAM L3 16MiB L3 16MiB (NUMA Node 3) 64GB RAM Core 4 Core 5 Core 6 Core 7 Core 4 Core 5 Core 6 Core 7 19
Οδηγίες l Για χρήση του sandman: $ qsub q serial l nodes=sandman:ppn=64 <script> l Μπορείτε να επιλέξετε μεταξύ OpenMP και ΤΒΒs για την εκπόνηση της άσκησης l Για μεταγλώττιση εκτέλεση προγραμμάτων σε TBBs θα δοθούν οδηγίες και υλικό από τη λίστα l Θα βρείτε τον κώδικα της άσκησης στον scirouter στο path: /home/parallel/pps/2016-17/a2 20