Εθνικό Μετςόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιςτών Εργαςτήριο Υπολογιςτικών Συςτημάτων Παρουςίαςθ 2 θσ Άςκθςθσ: Ανάπτυξη παράλληλου κώδικα και μελζτη επίδοςησ του αλγόριθμου FW ςε μοντζρνεσ πολυπφρηνεσ αρχιτεκτονικζσ Ακ. Έτοσ 2017-2018 9 ο Εξάμθνο
Αλγόριθμοσ Floyd-Warshall (FW) Εφρεςθ ελάχιςτου μονοπατιοφ ανάμεςα ςε οποιοδιποτε ηεφγοσ κόμβων ενόσ κατευκυνόμενου γράφου (τα βάρθ των ακμϊν μποροφν να είναι και αρνθτικά). 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]); Για κάκε χρονικό βιμα k υπολογίηει για κάκε ηεφγοσ κόμβων i-j αν υπάρχει ςυντομότερο μονοπάτι από τον i προσ τον j περνϊντασ από το κόμβο k N: αρικμόσ κόμβων του γράφου Α: πίνακασ διπλανϊν κορυφϊν (αν i,j δεν ςυνδζονται τότε Α*i+*j+ = αρχικά) Πολυπλοκότθτα: Θ(n 3 ) 2
Ακ. Έτοσ 2010-2011 Παράδειγμα: γράφοσ 8 κόμβων
Ακ. Έτοσ 2010-2011 Παράδειγμα: γράφοσ 8 κόμβων
Ακ. Έτοσ 2010-2011 Παράδειγμα: γράφοσ 8 κόμβων
k=0 FW Task graph A 00 A 00 A 01 A 02 A 03 A 10 A 11 A 12 A 13 A 01 A 02 A 03 A 10 A 20 A 30 A 20 A 21 A 22 A 23 A 30 A 31 A 32 A 33 A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33 k=1 A 11 A 00 A 01 A 02 A 03 A 10 A 11 A 12 A 13 A 10 A 12 A 13 A 01 A 21 A 31 A 20 A 21 A 22 A 23 A 30 A 31 A 32 A 33 A 00 A 02 A 03 A 20 A 22 A 23 A 30 A 32 A 33 6
Σειριακή και παράλληλη εκτζλεςη Για μεγάλα Ν (ο Α δεν χωράει ςτθν cache), ο FW είναι memory bound: Ο πίνακασ Α πρζπει να μεταφζρεται από τθν κφρια μνιμθ ςε κάκε επανάλθψθ k Οι πράξεισ που γίνονται είναι πολφ απλζσ (ςφγκριςθ / πρόςκεςθ) ςε ακζραιουσ ι πραγματικοφσ απλισ ακρίβειασ Παράλλθλθ εκτζλεςθ: Τα loops i, j είναι παράλλθλα Ο αλγόρικμοσ δεν κλιμακϊνει καλά ςε αρχιτεκτονικζσ κοινισ μνιμθσ 7
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]); Καλείται ωσ: FWR(A, A, A); 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
A 00 A 01 A 10 A 11 17
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 ); 1 2 Παραλλθλία FWR (A 11, B 10, C 01 ); 3 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 ); 4 5 6 18
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 9 8 9 12 12 12 11 12 12 12 11 11 11 11 10 19
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 20
Οδηγίεσ Για χριςθ του sandman: $ qsub q serial l nodes=sandman:ppn=64 <script> Μπορείτε να επιλζξετε μεταξφ OpenMP και ΤΒΒs για τθν εκπόνθςθ τθσ άςκθςθσ Μπορείτε να χρθςιμοποιείτε τα μθχανιματα τθσ ουράσ parlab για τθν ανάπτυξθ του παράλλθλου κϊδικα Θα βρείτε τον κϊδικα τθσ άςκθςθσ ςτον scirouter ςτο path: /home/parallel/pps/2017-2018/a2/fw-serial Θα βρείτε παραδείγματα και οδθγίεσ μεταγλϊττιςθσ/εκτζλεςθσ για τα TBBs ςτον scirouter ςτο path: /home/parallel/pps/2017-2018/a2/tbb-workspace 21