Cilk: Φιλοσοφία και Χρήση

Σχετικά έγγραφα
Cilk: Φιλοσοφία και Χρήση

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

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ. Μελέτη Αλγορίθμων Εκτέλεσης και Χρονοδρομολόγησης Παράλληλων Εργασιών ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

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

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

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

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

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

1 Επισκόπηση. 2 Cilk. 3 Threading Building Blocks 4 UPC. 5 Charm++ 2 1/2015 Συστήματα Παράλληλης Επεξεργασίας

Αναδρομή Ανάλυση Αλγορίθμων

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Παρουσίαση 5 ης Άσκησης:

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Παρουσίαση 5 ης Άσκησης:

Διεργασίες και Νήματα (2/2)

Συστήµατα Παράλληλης Επεξεργασίας. Παράλληλοςπρογραµµατισµός: Υλοποίηση παράλληλων προγραµµάτων

Ταξινόμηση με συγχώνευση Merge Sort

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Παρουσίαση 2 ης Άσκησης:

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

Αναδρομικοί Αλγόριθμοι

Λειτουργικά Συστήματα Πραγματικού Χρόνου

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Παράλληλος προγραμματισμός: Υλοποίηση παράλληλων προγραμμάτων

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

Αλγόριθμοι Ταξινόμησης Μέρος 2

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

Εισαγωγικά & Βασικές Έννοιες

Συλλογές, Στοίβες και Ουρές

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

Δομές Δεδομένων & Αλγόριθμοι

Εισαγωγικά & Βασικές Έννοιες

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

Σκελετός Παρουσίασης

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Εντολές γλώσσας μηχανής

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

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

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

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

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP (2 ο Μέρος)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

Προγραμματιστικές Τεχνικές

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Παράλληλος Προγραμματισμός με τα reading Building Blocks

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

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

QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009)

Πληροφορική 2. Γλώσσες Προγραμματισμού

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι. Λειτουργικά Συστήματα Ι ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Επ. Καθ. Κ. Λαμπρινουδάκης

Δομές Δεδομένων και Αλγόριθμοι

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

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

Η γλώσσα Fortress. Γιώργος Κορφιάτης. Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού, Εργαστήριο Λογισμικού, ΕΜΠ ...

Κεφάλαιο 3. Διδακτικοί Στόχοι

Επανάληψη για τις Τελικές εξετάσεις

Σχεδίαση & Ανάλυση Αλγορίθμων

Δομές Δεδομένων και Αλγόριθμοι

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

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

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

Το μάθημα. Λειτουργικά Συστήματα Πραγματικού Χρόνου Βασικές Έννοιες 6. Ενσωματωμένα Συστήματα (embedded systems) Παραδείγματα

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

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

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

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

Διάλεξη 19: Κατανομή Πόρων Κόψιμο Τούρτας. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

Μάθημα 7 ο. Αλγόριθμοι Χρονοδρομολόγησης

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Διάλεξη 04: Παραδείγματα Ανάλυσης

Παρουσίαση 2 ης Άσκησης:

Παρουσίαση 3ης Άσκησης

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC

Παρουσίαση 1 ης Άσκησης:

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Μεταγλωττιστές Βελτιστοποίηση

Προγραμματισμός Ι (ΗΥ120)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

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

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

HY-486 Αρχές Κατανεμημένου Υπολογισμού

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Transcript:

1 Cilk: Φιλοσοφία και Χρήση Παράλληλα Συστήματα Επεξεργασίας 9ο εξάμηνο ΣΗΜΜΥ ακ έτος 2010-2011 http://wwwcslabecentuagr/courses/pps Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ Νοέμβριος 2010

Περιεχόμενα 2 Εισαγωγή Cilk: Φιλοσοφία και Χρήση Cilk: Θέματα υλοποίησης

3 Το τζάμπα γεύμα The free lunch Το τζάμπα γεύμα: Εκθετική αύξηση της σειριακής επίδοσης των CPUs (frequency scaling, ILP exploitation) Εκθετική αύξηση στον αριθμό των transistors (νόμος Moore)

3 Το τζάμπα γεύμα τελείωσε! The free lunch is over! Το τζάμπα γεύμα: Εκθετική αύξηση της σειριακής επίδοσης των CPUs (frequency scaling, ILP exploitation) Εκθετική αύξηση στον αριθμό των transistors (νόμος Moore) Τελείωσε! Οι αρχιτέκτονες έφθασαν σε φυσικά όρια Λύση: πολυπύρηνοι επεξεργαστές νόμος Moore εκθετική αύξηση πυρήνων

4 the "Multicore Era" όπου μόνο παράλληλα προγράμματα εκμεταλλεύονται το νέο υλικό Ο παράλληλος προγραμματισμός είναι δύσκολος Δύσκολο να επιχειρηματολογίσουμε για ορθότητα (πχ, data races) Ο παράλληλος προγραμματισμός είναι "εσωστρεφής τέχνη" Έλλειψη εργασλείων (debuggers, profiles, languages, ) Οπότε τα τελευταία χρόνια: έμφαση στο να γίνει ο παράλληλος προγραμματισμός: εύκολος λιγότερο επιρρεπής σε λάθη Νέες γλώσσες, μοντέλα, κλπ

5 Παράλληλος προγραμματισμός Is Parallel Programming Hard, And If So, Why? [McKenney et al '09] productivity performance generality 2 από τα 3!

Μοντέλα έκφρασης παραλληλισμού 6 Data parallel Μια πράξη εφαρμόζεται ταυτόχρονα σε συλλογικότητες δεδομένων (πχ πίνακες) (παραγωγικό, όχι γενικό) Task parallel Ο χρήστης ορίζει ρητά τα παράλληλα κομμάτια εργασίας (parallel tasks) (γενικό, όχι παραγωγικό)

7 Βήματα παράλληλης εκτέλεσης διαμοιρασμός εργασίας (έκφραση παραλληλισμού) Η συνολική δουλεία πρέπει να χωριστεί σε παράλληλες εργασίες (parallel tasks) work partitioning

7 Βήματα παράλληλης εκτέλεσης διαμοιρασμός εργασίας (έκφραση παραλληλισμού) Η συνολική δουλεία πρέπει να χωριστεί σε παράλληλες εργασίες (parallel tasks) work χρονοδρομολόγηση (scheduling) Οι εργασίες πρέπει να τοποθετηθούν σε επεξεργαστές partitioning c 1 c 2 c 3 c 4

7 Βήματα παράλληλης εκτέλεσης διαμοιρασμός εργασίας (έκφραση παραλληλισμού) Η συνολική δουλεία πρέπει να χωριστεί σε παράλληλες εργασίες (parallel tasks) (data parallel: σύστημα, task parallel: χρήστης) work χρονοδρομολόγηση (scheduling) Οι εργασίες πρέπει να τοποθετηθούν σε επεξεργαστές (σύστημα) partitioning c 1 c 2 c 3 c 4

7 Βήματα παράλληλης εκτέλεσης διαμοιρασμός εργασίας (έκφραση παραλληλισμού) Η συνολική δουλεία πρέπει να χωριστεί σε παράλληλες εργασίες (parallel tasks) (data parallel: σύστημα, task parallel: χρήστης) χρονοδρομολόγηση (scheduling) Οι εργασίες πρέπει να τοποθετηθούν σε επεξεργαστές (σύστημα) μέγεθος παράλληλων εργασιών (task granularity) ποσότητα δουλείας ανά εργασία: μικρή μεγάλη επιβάρυνση μεγάλη περιορισμός παραλληλίας work partitioning c 1 c 2 c 3 c 4

Βασικό Θέμα παρουσίασης (και εργαστηριακής άσκησης) 8 Data parallel: Η παραλληλοποίηση προκύπτει από τη δομή των δεδομένων (πχ πίνακες) Θα ασχοληθούμε με αλγόριθμους, όπου η παραλληλοποίηση προκύπτει από τη δομή του αλγόριθμου (πχ D&C) Θα χρησιμοποιήσουμε το Task parallel μοντέλο Γενικό (*) Θα χρησιμοποιήσουμε τη γλώσσα Cilk Επέκταση της C σκοπός: μεθοδολογία για παραλληλισμό με tasks αλλά: περιορίζουμε τη γενικότητα (συγκεκριμένες περιπτώσεις)

Task parallelism 9 Ο προγραμματιστής δηλώνει ρητά τις παράλληλες εργασίες γράφος εργασιών (task graph) Ο χρήστης ορίζει σημεία δημιουργίας εργασιών /* Cilk example */ x = spawn A(); y = spawn B(); C(); C A B

Task parallelism 9 Ο προγραμματιστής δηλώνει ρητά τις παράλληλες εργασίες γράφος εργασιών (task graph) Ο χρήστης ορίζει σημεία δημιουργίας εργασιών σημεία συγχρονισμού διεργασιών /* Cilk example */ x = spawn A(); y = spawn B(); C(); sync; /* x,y are available */ C A B

10 Αλγόριθμοι Διαίρε και Βασίλευε divide and conquer -- D&C Divide and Conquer: if cant divide: return unitary solution divide problem in two solve first (recursively) solve second (recursively) combine solutions (stop recursion) solve first/second μπορούν να γίνουν παράλληλα recursive splitting

11 Example: quicksort divide & conquer is easily parallelized def qsort(arr, low, high){ if high == low return; pivotval = findpivot(); pivotloc = partition(pivotval); qsort(arr, low, pivotloc-1); qsort(arr, pivotloc+1, high); } // no need for result combination

11 Example: quicksort divide & conquer is easily parallelized def qsort(arr, low, high){ if high == low return; pivotval = findpivot(); pivotloc = partition(pivotval); spawn qsort(arr, low, pivotloc-1); spawn qsort(arr, pivotloc+1, high); sync; // no need for result combination } recursive splitting

12 Τακτικές για παράλληλο προγραμματισμό βλ και ομιλία του Guy Steele στο ICFP '09 Μοντέλο συσσωρευτή (accumulator) Χωρισμός προβλήματος στην αρχή και στο επόμενο σταδιακή ανανέωση λύσης, καταναλώνοντας το επόμενο Χρησιμοποιείται στον σειριακό προγραμματισμό δεν μπορεί να παραλληλοποιηθεί Μοντέλο διαίρε και βασίλευε (D&C) Χωρισμός του προβλήματος σε υπο-προβλήματα Αναδρομική λύση των υπο-προβλημάτων Συνδυασμός λύσεων * * Συνήθως πιο πολύπλοκη διαδικασία από τη σταδιακή ανανέωση λύσης

Cilk 13 Επέκταση της C με λίγα keywords Επικεφαλής της ομάδας ο καθ Charles E Leiserson (MIT) Ισχυρό θεωρητικό υπόβαθρο φράγματα για χρόνο και χώρο παράληλης εκτέλεσης έμφαση στην αποδοτική χρονοδρομολόγηση Ιστορία - 1994: Πρώτη έκδοση (Cilk-1) - 1998: Implementation of the Cilk-5 Multithreaded Language paper - 2006: Cilk Arts - 2008: Cilk++ 10-2009: Αγορά Cilk arts από Intel

Cilk keywords cilk: Ορισμός συναρτήσεων που ορίζουν Cilk διεργασίες spawn: Δημιουργία Cilk διεργασίας Ο πατέρας και το παιδί μπορούν να εκτελεστούν παράλληλα sync: Αναμονή ολοκλήρωσης Cilk διεργασιών Τα αποτελέσματα των παιδιών είναι έτοιμα cilk int fib(int n) { if (n < 2) return (n); x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return (x + y); } inlet abort 14

15 Ο γράφος διεργασιών αναδιπλώνεται δυναμικά (στο χρόνο εκτέλεσης) cilk int fib(int n) { if (n < 2) return (n); x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return (x + y); }

15 Ο γράφος διεργασιών αναδιπλώνεται δυναμικά (στο χρόνο εκτέλεσης) cilk int fib(int n) { if (n < 2) return (n); x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return (x + y); } f(4)

15 Ο γράφος διεργασιών αναδιπλώνεται δυναμικά (στο χρόνο εκτέλεσης) cilk int fib(int n) { if (n < 2) return (n); x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return (x + y); } f(4) f(3) f(2)

15 Ο γράφος διεργασιών αναδιπλώνεται δυναμικά (στο χρόνο εκτέλεσης) cilk int fib(int n) { if (n < 2) return (n); x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return (x + y); } f(4) f(2) f(3) f(2) f(1) f(1) f(0) f(1) f(0)

15 Ο γράφος διεργασιών αναδιπλώνεται δυναμικά (στο χρόνο εκτέλεσης) cilk int fib(int n) { if (n < 2) return (n); x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return (x + y); } f(4) f(2) f(3) f(2) f(1) f(1) f(0) f(1) f(0)

16 Παράδειγμα: πρόσθεση Μετατροπή αλγορίθμου συσσωρευτή σε διαίρε και βασίλευε N i=0 A i add(a,n){ res = 0; for (i=0; i<n; i++) res += A[i]; return res; }

16 Παράδειγμα: πρόσθεση Μετατροπή αλγορίθμου συσσωρευτή σε διαίρε και βασίλευε N i=0 A i add(a,n){ res = 0; for (i=0; i<n; i++) res += A[i]; return res; } add_r(a, n){ if (n == 1) return A[0]; x1 = spawn add_r(a,n/2); x2 = spawn add_r(a+n/2,n-n/2); sync; return (x1+x2); }

16 Παράδειγμα: πρόσθεση Μετατροπή αλγορίθμου συσσωρευτή σε διαίρε και βασίλευε N i=0 A i add(a,n){ res = 0; for (i=0; i<n; i++) res += A[i]; return res; } add_r(a, n){ if (n == 1) return A[0]; x1 = spawn add_r(a,n/2); x2 = spawn add_r(a+n/2,n-n/2); sync; return (x1+x2); } βελτίωση ταχύτητας;

16 Παράδειγμα: πρόσθεση Μετατροπή αλγορίθμου συσσωρευτή σε διαίρε και βασίλευε N i=0 A i add(a,n){ res = 0; for (i=0; i<n; i++) res += A[i]; return res; } add_r(a, n){ if (n < K) return add(a,n); x1 = spawn add_r(a,n/2); x2 = spawn add_r(a+n/2,n-n/2); sync; return (x1+x2); } βελτίωση ταχύτητας;

17 Παράδειγμα: Αναζήτηση Χώρος λύσεων (πχ AI) Δομή δεδομένων DF_Search(node): for c in nodeget_children(): DF_Search(c)

17 Παράδειγμα: Αναζήτηση Χώρος λύσεων (πχ AI) Δομή δεδομένων DF_Search(node): for c in nodeget_children(): spawn DF_Search(c) sync

Παράδειγμα: Αναζήτηση Χώρος λύσεων (πχ AI) Δομή δεδομένων DF_Search(node): for c in nodeget_children(): spawn DF_Search(c) sync Αν βρω αυτό που ψάχνω; (ή ανακαλύψω ότι η αναζήτηση σε ένα τμήμα του χώρου είναι ανευ ουσίας;) 17

18 Παράδειγμα: πολλαπλασιασμός N i=0 A i mul(a,n){ res = 1; for (i=0; i<n; i++) res *= A[i]; return res; } mul_r(a, n){ if (n == 1) return A[0]; x1 = spawn mul_r(a,n/2); x2 = spawn mul_r(a+n/2,n-n/2); sync; return (x1*x2); } Τι (αλγοριθμική) βελτίωση μπορώ να κάνω;

18 Παράδειγμα: πολλαπλασιασμός N i=0 A i mul(a,n){ res = 1; for (i=0; i<n; i++) res *= A[i]; return res; } mul_r(a, n){ if (n == 1) return A[0]; x1 = spawn mul_r(a,n/2); x2 = spawn mul_r(a+n/2,n-n/2); sync; return (x1*x2); } Τι (αλγοριθμική) βελτίωση μπορώ να κάνω; Όταν συναντήσω το 0, μπορώ να σταματήσω!

19 Παράδειγμα: πολλαπλασιασμός inlet/abort: έλεγχος για 0 cilk int product(int *A, int n) { int p=1; inlet void mult(int x) { p *= x; if (p == 0) abort; return; } if (n == 1) return A[0]; mult( spawn product(a, n/2) ); mult( spawn product(a+n/2, n-n/2) ); sync; return p; }

Μοντέλο Επίδοσης Cilk 20 - T p : χρόνος εκτέλσης σε P επεξ

Μοντέλο Επίδοσης Cilk 20 - T p : χρόνος εκτέλσης σε P επεξ - T 1 : work (κόστος εκτέλεσης όλων των κόμβων)

Μοντέλο Επίδοσης Cilk - T p : χρόνος εκτέλσης σε P επεξ - T 1 : work (κόστος εκτέλεσης όλων των κόμβων) - T : span (κόστος εκτέλεσης για επεξ) 20

Μοντέλο Επίδοσης Cilk 20 - T p : χρόνος εκτέλσης σε P επεξ - T 1 : work (κόστος εκτέλεσης όλων των κόμβων) - T : span (κόστος εκτέλεσης για επεξ) - Κάτω όρια: T p T 1 /P, T p T - Μέγιστο speedup: T 1 /T

Μοντέλο Επίδοσης Cilk 20 - T p : χρόνος εκτέλσης σε P επεξ - T 1 : work (κόστος εκτέλεσης όλων των κόμβων) - T : span (κόστος εκτέλεσης για επεξ) - Κάτω όρια: T p T 1 /P, T p T - Μέγιστο speedup: T 1 /T - Ο χρόνοδρομολογητής της Cilk επιτυγχάνει T p = T 1 /P + O(T ) (γραμμικό speedup εάν P T 1 /T ) απαιτεί S p PS 1 χώρο στη στοίβα έχει καλή επίδοση και στην πράξη

Parallel slack (task grain) 21 P T 1 /T parallel slack: (T 1 /T ) /P Παραλληλισμός προγράμματος T1 /T Παραλληλισμός μηχανήματος P Χρειάζεται τάξης μεγέθους περισσότερος παραλληλισμός στο πρόγραμμα από ότι στο πραγματικό σύστημα Διαισθητικά: + Πρόγραμμα δεν εξαρτάται από αριθμό επεξεργαστών + Συνεισφέρει στην αποδοτική χρονοδρομολόγηση + Επιτρέπει καλύτερη κατανομή φόρτου (load balancing) αλλά: - Αν το μέγεθος δουλειάς της κάθε εργασίας μικρό, τότε οι επιβαρύνσεις του συστήματος επηρεάζουν σημαντικά

22 Ισοκατανομή φόρτου - μέγεθος εργασίας load balancing - task grain κόστος uniform εργασίες Σταθερό κόστος εκτέλεσης: 1 εργασία / πραγματικό επεξεργαστή

22 Ισοκατανομή φόρτου - μέγεθος εργασίας load balancing - task grain κόστος? uniform εργασίες Σταθερό κόστος εκτέλεσης: 1 εργασία / πραγματικό επεξεργαστή Το κόστος εκτέλεσης είναι μη-σταθερό και άγνωστο Μεγάλο parallel slack

23 Χρονοδρομολόγηση στο χώρο χρήστη user-level scheduling Αριθμός εργασιών T P επεξεργαστές (kernel threads) Η κάθε εργασία μπορεί να παράγει άλλες να περιμένει την ολοκλήρωση των παιδιών της Στόχοι Ισοκατανομή φόρτου εργασίας Αποδοτική χρήση χώρου Μικρή επιβάρυνση (ανεξάρτητη του T) Πότε εκτελείται ο ΧΔ;

23 Χρονοδρομολόγηση στο χώρο χρήστη user-level scheduling Αριθμός εργασιών T P επεξεργαστές (kernel threads) Η κάθε εργασία μπορεί να παράγει άλλες να περιμένει την ολοκλήρωση των παιδιών της Στόχοι Ισοκατανομή φόρτου εργασίας Αποδοτική χρήση χώρου Μικρή επιβάρυνση (ανεξάρτητη του T) Πότε εκτελείται ο ΧΔ; Εισάγονται κατάλληλες κλήσεις στις spawn/sync/κλπ

24 Τακτικές χρονοδρομολόγησης work sharing: Όταν δημιουργούνται νέες εργασίες ο ΧΔ προσπαθεί να τις "στείλει" σε ανενεργούς επεξεργαστές work stealing: Οι ανενεργοί επεξεργαστές προσπαθούν να "κλέψουν" εργασίες Γενικά προτιμάται η τακτική work stealing (στη Cilk και όχι μόνο) καλύτερο locality μικρότερη επιβάρυνση συγχρονισμού Βέλτιστα θεωρητικά όρια ως προς χρόνο, χώρο [Blumofe and Leiserson '99]

25 work stealing Χρονοδρομολόγηση στη Cilk Μια ουρά ΧΔ ανά P deque (double-ended queue) pushbot popbot poptop top bot P 2 T x T y T z T p P 1

25 work stealing Χρονοδρομολόγηση στη Cilk Μια ουρά ΧΔ ανά P deque (double-ended queue) pushbot popbot poptop top bot P 2 T x T y T z T p T c T p spawn task T c pushbot(tp ) execute(t c ) (FAST!) P 1

25 work stealing Χρονοδρομολόγηση στη Cilk Μια ουρά ΧΔ ανά P deque (double-ended queue) pushbot popbot poptop top bot P 2 T y T z T p T c T p spawn task T c pushbot(tp ) execute(t c ) (FAST!) P 1 ανενεργός Τυχαία επιλογή επεξεργαστή p p->poptop() Εκτέλεση task που προέκυψε (SLOW!) P 1 T x

Υλοποίηση ΧΔ χώρου χρήστη 26 Για να υποστηρίζεται η κλοπή εργασίων πρέπει η κάθε εργασία να μπορεί να μεταφερθεί σε διαφορετικό επεξεργαστή Τι χρείαζεται η κάθε διεργασία για να εκτελεστεί; Κώδικα (πχ δείκτη σε συνάρτηση) Θέση στον κώδικα Δεδομένα: Στοίβα Σωρός Η Cilk υλοποιεί cactus stack

Cactus stack A B C D E Εικόνα της κάθε συνάρτησης: A B C D E A A A A A B C C C D E 27

Μεταγλώττιση και εκτέλεση προγραμμάτων Cilk 28 $ cilkc fibcilk -o fib

Μεταγλώττιση και εκτέλεση προγραμμάτων Cilk 28 $ cilkc fibcilk -o fib $ /fib --nproc 2 --stats 1 -- 35 Result: 9227465 RUNTIME SYSTEM STATISTICS: Wall-clock running time on 2 processors: 2114348 s

Μεταγλώττιση και εκτέλεση προγραμμάτων Cilk 28 $ cilkc fibcilk -o fib $ /fib --nproc 2 --stats 1 -- 35 Result: 9227465 RUNTIME SYSTEM STATISTICS: Wall-clock running time on 2 processors: 2114348 s $ /fib --nproc 8 --stats 1 -- 35 Result: 9227465 RUNTIME SYSTEM STATISTICS: Wall-clock running time on 8 processors: 538614000 ms

Μεταγλώττιση και εκτέλεση προγραμμάτων Cilk 28 $ cilkc fibcilk -o fib $ /fib --nproc 2 --stats 1 -- 35 Result: 9227465 RUNTIME SYSTEM STATISTICS: Wall-clock running time on 2 processors: 2114348 s $ /fib --nproc 8 --stats 1 -- 35 Result: 9227465 RUNTIME SYSTEM STATISTICS: Wall-clock running time on 8 processors: 538614000 ms $ /fib --help Cilk options:

29 Παράλληλη αποτίμηση έκφρασης (εργαστηριακή άσκηση) * + ˆ - 13 9 7 3 2 Δένδρο αριθμητικής έκφρασης Φύλλα: αριθμητικές τιμές Ενδιάμεσοι κόμβοι: δυαδικοί τελεστές Ζήτείται η παράλληλη αποτίμηση της έκφρασης

Run-length encoding (εργαστηριακή άσκηση) def rle(xs): ret = [] # return list curr = xs[0] # current element freq = 1 # current element's frquency for item in xs[1:]: if item == curr: freq += 1 else: retappend((curr,freq)) curr,freq = (item,1) retappend((curr,freq)) return ret Ζήτείται παράλληλη έκδοση του αλγόριθμου κωδικοποίησης χρησιμοποιώντας D&C 30