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



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

Διάλεξη 15η: Αναδρομή, μέρος 1ο

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

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

Προγραµµατισµός. Αναδροµή (1/2)

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

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

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

Ηβασικήσυνάρτηση προγράμματος main()

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Η βασική συνάρτηση προγράμματος main()

Κατανεμημένος και Παράλληλος Προγραμματισμός

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

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

Παράλληλη Επεξεργασία Κεφάλαιο 1 Γιατί Παράλληλος Προγραμματισμός;

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Λειτουργικά Συστήματα (ΗΥ321)

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

Μεθόδων Επίλυσης Προβλημάτων

Εισαγωγή στον δομημένο προγραμματισμό

Δομές Δεδομένων (Data Structures)

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εργαστήριο 9: Αρχεία

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Ενδεικτικές λύσεις και στατιστικά

Διδάσκων: Παναγιώτης Ανδρέου

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Αμοιβαίος αποκλεισμός

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

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

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

Η γλώσσα προγραμματισμού C

Μεθόδων Επίλυσης Προβλημάτων

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Δομημένος Προγραμματισμός

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Εργαστήριο 2: Πίνακες

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

Προγραμματισμό για ΗΜΥ

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Επεξεργασία Αρχείων Κειµένου

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

Εισαγωγή στις Συναρτήσεις

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Προγραμματισμός Υπολογιστών με C++

Δομημένος Προγραμματισμός (ΤΛ1006)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

είκτες και Πίνακες (2)

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Transcript:

Η πολυνηματική γλώσσα προγραμματισμού Cilk Β Καρακάσης Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού Μεταπτυχιακό Μάθημα (688), ΣΗΜΜΥ Νοέμβριος 2009 Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 1 / 22

Βασικά χαρακτηριστικά Γλώσσα παράλληλου προγραμματισμού βασισμένη στην C (προσθήκη κάποιων επιπλέον λέξεων-κλειδιών) Η απομάκρυνση των λέξεων-κλειδιών της Cilk οδηγεί σε έγκυρο σειριακό πρόγραμμα C, που ονομάζεται η C έκθλιψη (C elision) του προγράμματος Cilk Υπεύθυνο για την πραγματική παραλληλοποίηση είναι το περιβάλλον εκτέλεσης (runtime environment) της Cilk Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 2 / 22

Βασικά χαρακτηριστικά (συνέχεια) Παραλληλισμός βασισμένος σε εργασίες (task-level parallelism) με χρήση ουρών εργασιών και κατάλληλου χρονοδρομολογητή Κατάλληλη για δυναμικό και ασύγχρονο παραλληλισμό Κατάλληλη για μηχανές μοιραζόμενης μνήμης (shared memory) που παρέχουν συνέπεια μνήμης (memory consistency) Ισχυρό αλγοριθμικό υπόβαθρο για τον χρονοδρομολογητή H επίδοση των προγραμμάτων Cilk μπορεί να προβλέπεται και θεωρητικά Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 3 / 22

Παράδειγμα προγράμματος Cilk Αριθμοί Fibonacci # include <stdlibh> # include <stdioh> # include <cilkh> cilk int fib (int n) { if (n < 2) return n; else { int x, y; x = spawn fib(n-1); y = spawn fib(n-2); sync; return (x+y); Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 4 / 22

Παράδειγμα προγράμματος Cilk Αριθμοί Fibonacci (συνέχεια) cilk int main (int argc, char *argv[]) { int n, result; n = atoi(argv[1]); result = spawn fib(n); sync; printf(" Result: %d\n", result); return 0; Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 5 / 22

Το μοντέλο προγραμματισμού της Cilk Δύο βασικές λέξεις-κλειδιά: spawn Δημιουργία μίας νέας ροής εκτέλεσης (υπάρχει μία σχέση γονέα-παιδιού μεταξύ καλούντος και καλουμένου) sync Αναμονή για την ολοκλήρωση παιδιών (λειτουργίες σε μεταβλητές που επηρεάζονται άμεσα ή έμμεσα από την εκτέλεση των παιδιών δεν είναι ασφαλείς πριν από την χρήση της sync) Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 6 / 22

Το μοντέλο προγραμματισμού της Cilk Ροές εκτέλεσης και ατομικότητα Μία ροή εκτέλεσης (thread) στην Cilk είναι ένα μέγιστο σύνολο εντολών που τελειώνουν με spawn, sync ή return Οι ροές εκτέλεσης μίας διαδικασίας (procedure) εκτελούνται ατομικά μεταξύ τους Δεν υπάρχει ανάγκη από ρητά κλειδώματα (locks) Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 7 / 22

Παράδειγμα ανανέωσης χωρίς κλείδωμα cilk int fib (int n) { int x = 0; inlet void summer (int result) { x += result; return; if (n < 2) return n; else { summer(spawn fib(n-1)); summer(spawn fib(n-2)); sync; return (x); Τα inlets επιτρέπουν πιο σύνθετο χειρισμό της επιστρεφόμενης τιμής κάποιας διαδικασίας που έχει γίνει spawn, και επιπλέον εκτελούνται ατομικά Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 8 / 22

Χρονοδρομολόγηση εργασιών Θεωρητικό υπόβαθρο Έστω T P ο χρόνος εκτέλεσης ενός προγράμματος Cilk σε P επεξεργαστές, τότε T 1 είναι ο χρόνος του συνολικού έργου (work), και T είναι το μέγεθος (σε μονάδες χρόνου) του κρίσιμου μονοπατιού (critical path) Επομένως, ο χρόνος εκτέλεσης ενός προγράμματος Cilk σε P επεξεργαστές είναι T P = T 1 /P + O(T ) T P T 1 /P + c T, όπου c είναι η επιβάρυνση του κρίσιμου μονοπατιού (critical path overhead) Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 9 / 22

Χρονοδρομολόγηση εργασιών Θεωρητικό υπόβαθρο (συνέχεια) Η μέγιστη επιτάχυνση της επίδοσης (speedup) είναι P = T 1 /T Το περιθώριο παραλληλισμού (parallel slackness) ορίζεται ως ο λόγος P/P Εάν P/P c (δηλ ο αριθμός των διαθέσιμων επεξεργαστών είναι σαφώς μικρότερος του διαθέσιμου παραλληλισμού), τότε T P T 1 /P Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 10 / 22

Χρονοδρομολόγηση εργασιών Θεωρητικό υπόβαθρο (συνέχεια) Εάν T S είναι ο χρόνος εκτέλεσης της C έκθλιψης, τότε ισχύει c 1 = T 1 /T S, όπου c 1 είναι η επιβάρυνση έργου (work overhead) του προγράμματος Cilk Ο χρόνος εκτέλεσης, επομένως, ενός προγράμματος Cilk σε P επεξεργαστές, όταν υπάρχει μεγάλο περιθώριο παραλληλισμού, είναι T P c 1 T S /P Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 11 / 22

Χρονοδρομολόγηση εργασιών Θεωρητικό υπόβαθρο (συνέχεια) Εάν T S είναι ο χρόνος εκτέλεσης της C έκθλιψης, τότε ισχύει c 1 = T 1 /T S, όπου c 1 είναι η επιβάρυνση έργου (work overhead) του προγράμματος Cilk Ο χρόνος εκτέλεσης, επομένως, ενός προγράμματος Cilk σε P επεξεργαστές, όταν υπάρχει μεγάλο περιθώριο παραλληλισμού, είναι T P c 1 T S /P Βασική αρχή χρονοδρομολογητή Ελαχιστοποίηση της επιβάρυνσης έργου Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 11 / 22

Παράδειγμα θεωρητικού υπολογισμού T 1 και T P-FIB(4) P-FIB(3) P-FIB(2) P-FIB(1) P-FIB(1) P-FIB(0) P-FIB(1) P-FIB(2) P-FIB(0) Κάθε spawn ή κοινή κλήση C δημιουργεί μία ακμή προς τα κάτω Κάθε spawn δημιουργεί και μία οριζόντια ακμή συνέχισης (continuation edge) Κάθε sync δημιουργεί μία ακμή επιστροφής (return edge) με φορά προς τα πάνω T 1 = 17 (πλήθος κόμβων) T = 8 (σκιασμένο μονοπάτι) Μέγιστη δυνατή επιτάχυνση: 17/8 = 2125 Η συνάρτηση P-Fib είναι όμοια με την fib με την διαφορά ότι κάνει μόνο ένα spawn στη πρώτη αναδρομική κλήση Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 12 / 22

Θέματα υλοποίησης Ουρές εργασιών και σχήμα κλοπής Κάθε φυσική μονάδα επεξεργασίας είναι ένας εργάτης (worker) που διατηρεί μία ουρά δύο άκρων με τις έτοιμες προς εκτέλεση διαδικασίες (double-ended ready queue ready deque) Κάθε spawn σώζει το πλαίσιο ενεργοποίησης (activation frame) της γονικής διαδικασίας, το προωθεί στο τέλος της ουράς εργασιών του τρέχοντος εργάτη και συνεχίζεται η εκτέλεση Μόλις αδειάσει η ουρά ενός εργάτη, τότε γίνεται κλέφτης (thief) και προσπαθεί να κλέψει την εργασία ενός άλλου εργάτη, που γίνεται πλέον θύμα (victim) Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 13 / 22

Θέματα υλοποίησης Δημιουργία εργασιών Δύο κλώνοι για κάθε cilk διαδικασία: ένας γρήγορος και ένας αργός Ο γρήγορος κλώνος είναι ουσιαστικά η C έκθλιψη της διαδικασίας με κάποιες δυνατότητες παραλληλισμού (προώθηση πλαισίων ενεργοποίησης στην ουρά εργασιών) Ο αργός κλώνος παρέχει πλήρη υποστήριξη παραλληλισμού (συγχρονισμός) Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 14 / 22

Θέματα υλοποίησης Δημιουργία εργασιών (συνέχεια) Κάθε spawn εκτελεί τον γρήγορο κλώνο της διαδικασίας, και μόνο εάν η διαδικασία έχει κλαπεί, τότε γίνεται «μεταφορά» στον αργό κλώνο Κάθε spawn αφότου σώσει το πλαίσιο ενεργοποίησης του πατέρα και το προωθήσει στην ουρά (push), καλεί συμβατικά (κλήση C) την διαδικασία που έγινε spawn στον κώδικα Cilk, και αμέσως μετά προσπαθεί να ανακτήσει (pop) το πλαίσιο ενεργοποίησής της Εάν αποτύχει, σημαίνει ότι κλάπηκε Πλεονέκτημα Το sync στον γρήγορο κλώνο δεν έχει καμία επιβάρυνση Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 15 / 22

Θέματα υλοποίησης Δημιουργία εργασιών (συνέχεια) Παράδειγμα υλοποίησης του γρήγορου κλώνου int fib (int n) { fib_frame *f; f = alloc(sizeof(*f)); f->sig = fig_sig; if (n < 2) { free(f, sizeof(*f)); return n; else { /* continuing */ Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 16 / 22

Θέματα υλοποίησης Δημιουργία εργασιών (συνέχεια) /* cont'd */ int x, y; f-> entry = 1; f->n = n; *T = f; push(); x = fib(n-1); if (pop(x) == FAILURE) return 0; /* */ ; /* sync is free */ free(f, sizeof(*f)); return (x+y); Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 17 / 22

Θέματα υλοποίησης Αλγόριθμος κλοπής εργασιών Βασική αρχή Πρώτα η δουλειά (work-first scheduling) Ελαχιστοποίηση της επιβάρυνσης έργου (ακόμα και) σε βάρος της επιβάρυνσης του κρίσιμου μονοπατιού Επιβάρυνση έργου Η επιπλέον δουλειά που καλείται να κάνει κάποιος εργάτης ως μέρος του πρωτοκόλλου χρονοδρομολόγησης (spawn, sync, abort) Επιβάρυνση κρίσιμου μονοπατιού Η δουλειά που εκτελεί ένας κλέφτης, όταν «κλέβει» την διαδικασία ενός εργάτη Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 18 / 22

Θέματα υλοποίησης Αλγόριθμος κλοπής εργασιών Βασική αρχή Πρώτα η δουλειά (work-first scheduling) Ελαχιστοποίηση της επιβάρυνσης έργου (ακόμα και) σε βάρος της επιβάρυνσης του κρίσιμου μονοπατιού Επιβάρυνση έργου Η επιπλέον δουλειά που καλείται να κάνει κάποιος εργάτης ως μέρος του πρωτοκόλλου χρονοδρομολόγησης (spawn, sync, abort) Επιβάρυνση κρίσιμου μονοπατιού Η δουλειά που εκτελεί ένας κλέφτης, όταν «κλέβει» την διαδικασία ενός εργάτη Πιο βασική αρχή Κάνε την πιο συνηθισμένη περίπτωση όσο πιο αποδοτική γίνεται Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 18 / 22

Θέματα υλοποίησης Αλγόριθμος κλοπής εργασιών (συνέχεια) Κάθε ουρά εργασίας βρίσκεται σε διαμοιραζόμενη (συνεχή) μνήμη και μοιράζεται από όλους τους εργάτες Με κάθε ουρά συσχετίζονται δύο δείκτες (indices): Ο δείκτης H που δείχνει την κεφαλή της ουράς Ο δείκτης T που δείχνει το τέλος της ουράς Αμετάβλητη των δεικτών: H T Κάθε εργάτης προσθέτει και αποσπά νέες διαδικασίες από το τέλος της ουράς Κάθε κλέφτης αποσπά διαδικασίες από την κεφαλή της ουράς Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 19 / 22

Θέματα υλοποίησης Αλγόριθμος κλοπής εργασιών (συνέχεια) Απαιτείται συγχρονισμός όταν Εργάτης και κλέφτης προσπαθούν να αποσπάσουν την τελευταία εγγραφή της ουράς Δύο ή περισσότεροι εργάτες προσπαθούν να αποσπάσουν εργασίες από την ίδια ουρά Λύση χρονοδρομολογητή Cilk Χρήση βαρέων κλειδωμάτων από τους κλέφτες (επιβάρυνση κρίσιμου μονοπατιού) Χρήση ελαφρών κλειδωμάτων από τους εργάτες/θύματα (επιβάρυνση έργου) Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 20 / 22

Θέματα υλοποίησης Αλγόριθμος κλοπής εργασιών (συνέχεια) Εργάτης/Θύμα Κλέφτης pop() { T--; if (H > T) { T++; lock(l); T--; if (H > T) { T++; unlock(l); return FAILURE; unlock(l); return SUCCESS; steal() { lock(l); H++; if (H > T) { H--; unlock(l); return FAILURE; unlock(l); return SUCCESS; Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 21 / 22

Συμπεράσματα και Σκέψεις Απλό και καθαρό μοντέλο προγραμματισμού Αποδοτικό όταν υπάρχει μεγάλος αριθμός από εργασίες (tasks) Αποδοτικό όταν το πρόβλημα είναι περιορισμένο από τους υπολογισμούς (computation-bound) Δείχνει ιδανικό για παράλληλο υπολογισμό αναδρομικών αλγορίθμων, πχ, αγνωστικών ως προς την κρυφή μνήμη (cache oblivious) αλγορίθμων Δείχνει κάπως περιοριστικό για την απευθείας παραλληλοποίηση επιστημονικών εφαρμογών (πρβλ OpenMP) Εστιασμένο σε υπολογιστικά συστήματα διαμοιραζόμενης μνήμης Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009 22 / 22