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

Σχετικά έγγραφα
Threading Building Blocks

Σύνοψη. Γενικά για TBBs. Γενικευμένος προγραμματισμός και templates parallel_for Εσωτερική λειτουργία βιβλιοθήκης

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προχωρημένα Θέματα ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ. Γεώργιος Παπαϊωάννου ( )

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

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

Boost - Boost Graph Library C++ library

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

12. Συναρτήσεις (Μέρος ΙI)

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

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Αντικειμενοστρεφής Προγραμματισμός

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

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

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Συναρτήσεις και Πίνακες

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

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

Παράλληλος Προγραμματισμός με OpenCL

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων

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

Αντικειµενοστρεφής Προγραµµατισµός

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Αντικειμενοστρεφής Προγραμματισμός

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

Οντοκεντρικός Προγραμματισμός

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

OpenMP. Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ. OpenMP p.

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

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

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

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

Διάλεξη 5: Δείκτες και Συναρτήσεις

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

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

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

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

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

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

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

Δομές Δεδομένων Boost C++ Libraries. 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

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

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

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

Οντοκεντρικός Προγραμματισμός

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

ΣΧΕΔΙΟΤΥΠΑ (TEMPLATES)

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

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων

Διάλεξη 6: Δείκτες και Πίνακες

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

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

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

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

Τεχνολογίες Υλοποίησης Αλγορίθµων

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Transcript:

Παράλληλος Προγραμματισμός με τα reading uilding locks Συστήματα Παράλληλης Επεξεργασίας 9ο Εξάμηνο, ΣΗΜΜΥ Εργ Υπολογιστικών Συστημάτων Σχολή ΗΜΜΥ, ΕΜΠ Οκτώβριος 2016

1 Γενικά για τα reading uilding locks 2 Tasks 3 Parallel For 4 Λειτουργία Βιβλιοθήκης 5 Task graphs 6 Links 2 10/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Γενικά για τα reading uilding locks 2 Tasks 3 Parallel For 4 Λειτουργία Βιβλιοθήκης 5 Task graphs 6 Links 3 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks Εισαγωγή C++ template library για αποδοτικό και εύκολο παράλληλο προγραμματισμό σε πλατφόρμες μοιραζόμενης μνήμης Αναπτύσσεται από την Intel από το 2004 (open-source από το 2007) Δεν είναι καινούργια γλώσσα ή επέκταση Μεταφέρσιμη στους περισσότερους C++ compilers, λειτουργικά συστήματα και αρχιτεκτονικές Παρέχει ένα πλούσιο σύστημα από παραμετροποιήσιμα (templated) ready to use αλγοριθμικά μοτίβα και δομές (αντίστοιχα με τη C++ STL) Εκμεταλλεύεται τα lambda expressions της C++11 από το 2008 (gcc>=45) 4 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Βασικά Χαρακτηριστικά Tasks Ο προγραμματιστής ορίζει tasks αντί για threads Επικεντρώνεται στην έκφραση του παραλληλισμού Η βιβλιοθήκη υλοποιεί τον παραλληλισμό: - διάσπαση συνολικής δουλειάς σε επιμέρους εργασίες - δρομολόγηση εργασιών - συγχρονισμός - ισοκατανομή φορτίου - διαχείριση πόρων συστήματος και εσωτερικών μηχανισμών 5 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Βασικά χαρακτηριστικά Κλιμακωσιμότητα Είναι σχεδιασμένη για κλιμακωσιμότητα Η συνολική δουλειά σπάει σε πολλά μικρά κομμάτια (tasks), συνήθως πολύ περισσότερα από τον αριθμό των επεξεργαστών ( parallel slack ) Εξασφαλίζεται ότι πάντα θα υπάρχει διαθέσιμη δουλειά για κάθε επιπλέον επεξεργαστή που προστίθεται Ο μηχανισμός load balancing εξασφαλίζει την κλιμακώσιμη απόδοση 6 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Βασικά χαρακτηριστικά Γενικευμένος προγραμματισμός Εκμεταλλεύεται τη δύναμη και την ευελιξία του γενικευμένου προγραμματισμού Παρέχει ένα πλούσιο σύνολο από παραμετροποιήσιμα (templated), ready to use παράλληλα αλγοριθμικά μοτίβα και δομές Αντίστοιχα με την C++ STL για τα σειριακά προγράμματα δεν απαιτεί ειδική υποστήριξη από το μεταγλωττιστή 7 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks T 40 Components Generic Parallel Algorithms parallel_for parallel_reduce parallel_scan parallel_do pipeline, parallel_pipeline parallel_sort parallel_invoke Concurrent Containers concurrent_unordered_map concurrent_unordered_set concurrent_unordered_hash_map concurrent_queue concurrent_bounded_queue concurrent_priority_queue concurrent_vector Synchronization Primitives atomic mutex, recursive_mutex spin_mutex, spin_rw_mutex queueing_mutex, queueing_rw_mutex Memory Allocation ṭbb_allocator, cache_aligned_allocator, scalable_allocator Raw Tasking task task_group task_list task_scheduler_observer Flow Graph graph function_node broadcast_node 8 10/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Γενικά για τα reading uilding locks 2 Tasks 3 Parallel For 4 Λειτουργία Βιβλιοθήκης 5 Task graphs 6 Links 9 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks Tasks Εκφράζουν μια στοιχειώδη ανεξάρτητη εργασία στο πρόγραμμα του χρήστη πολύ πιο lightweight από τα native threads του λειτουργικού (user-level, small-sized, non-preemptible, short-lived) parallel algorithms tasks scheduler Δυνατότητα άμεσης χρήσης των tasks από τον προγραμματιστή δημιουργία αυθαίρετα πολύπλοκων γράφων διεργασιών 10 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Tasks Προγραμματιστικό Μοντέλο Δύο βασικές λειτουργίες για την περιγραφή ενός task graph spawn: δημιουργία εργασίας wait: συγχρονισμός εργασιών 11 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks Task Objects (Templates) long SerialFib(long n) { if (n<2) return n; else return SerialFib(n-1) +SerialFib(n-2); } long n, sum; FibTask& r = *new ( allocate_root()) FibTask(n,&sum); spawn_root_and_wait(r); cout << sum; class FibTask: public task { const long n; long *const_sum; FibTask(long n_, long* sum_) { n=n_; sum=sum_; } task* execute() { if (n < cutoff) *sum = SerialFib(n); else { long x,y; FibTask& a = *new (allocate_child()) FibTask(n-1,&x); FibTask& b = *new (allocate_child()) FibTask(n-2,&y); set_ref_count(3); spawn(b); spawn(a); wait_for_all(); * sum = x+y; } return NULL; } } 12 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks Tasks (Lambdas) long SerialFib(long n) { if (n<16) return n; else { int x,y; tbb::task_group g; grun ( [&] { x = ParallelFib(n-1); } ); grun ( [&] { y = ParallelFib(n-2); } ); gwait(); return x+y; } } 13 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Σκονάκι στα lambdas της C++ [capture_mode](formal_parameters)->return_type{body} [capture_mode]: Τρόπος περάσματος παραμέτρων [=] : by value [&] : by reference [] : no capture (formal_parameters): Μπορεί να παραληφθεί αν δεν υπάρχουν παράμετροι και ο τύπος επιστροφής είναι implicit return_type: Μπορεί να παραληφθεί αν είναι void ή το body είναι τύπου return expr Παραδείγματα: [&](float x){sum+=x;} [&]{return *p++;} [=](float x){return a*x+b;} 14 10/2016 Συστήματα Παράλληλης Επεξεργασίας []{return rand();} [](float x, float y)->float{ if (x<y) return x; else return y; }

1 Γενικά για τα reading uilding locks 2 Tasks 3 Parallel For 4 Λειτουργία Βιβλιοθήκης 5 Task graphs 6 Links 15 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks Αρχικοποίηση Για τη χρήση οποιουδήποτε παράλληλου αλγορίθμου της βιβλιοθήκης απαιτείται η δημιουργία ενός αντικειμένου task_scheduler_init #include <tbb/task_scheduler_inith> #define NPROCS 4 int main() { tbb::task_scheduler_init init(nprocs); } 16 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Παραλληλοποίηση for-loop parallel_for Δήλωση #include <tbb/tbb_blocked_rangeh> #include <tbb/parallel_forh> template <typename Range, typename ody> ody parallel_for (const Range& r, const ody& b); Η parallel_for αναλαμβάνει: Να διασπάσει το αρχικό range σε πολλά μικρότερα Η βιβλιοθήκη παρέχει τις κλάσεις blocked_range, blocked_range2d, blocked_range3d Να εφαρμόσει την ανώνυμη συνάρτηση σε κάθε subrange 17 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Παραλληλοποίηση for-loop Παράδειγμα Σειριακός κώδικας: float a[1000]; for ( int i = 0 i!=1000; ++i ) foo(a[i]); Παράλληλος κώδικας (lambdas): tbb::parallel_for( tbb::blocked_range<size_t>(0,1000), [=](const tbb::blocked_range<size_t>& r) { for (size_t i = rbegin() ; i!= rend(); ++i ) foo(a[i]); } ); tbb::blocked_range<size_t>(0,1000) : δημιουργεί ανώνυμο αντικείμενο για την περιγραφή του αρχικού χώρου επαναλήψεων Η ανώνυμη συνάρτηση περιγράφει τι δουλειά θα γίνει σε οποιονδήποτε υποχώρο επαναλήψεων του loop 18 10/2016 Συστήματα Παράλληλης Επεξεργασίας

reading uilding locks parallel_for και partitioners parallel_for (blocked_range<size_t>(0,n,g), [](), some partitioner()) Δύο optional ορίσματα σε loop partitioners: Chunking: το μέγεθος στον οποίο σταματά η αναδρομική διάσπαση Τύπος partitioner Chunking: Grainsize G: το κομμάτι δουλειάς που θα αναλάβει κάθε task Optional argument στον constructor του blocked_range Partitioners: simple_partitioner recursive binary splitting affinity_partitioner ανάθεση με τρόπο ώστε να μεγιστοποιείται το cache locality auto_partitioner αυτόματη επιλογή grainsize με ευριστική μέθοδο ελαχιστοποίηση του range splitting, σε σημείο που να εξασφαλίζεται καλό load balancing 19 10/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Γενικά για τα reading uilding locks 2 Tasks 3 Parallel For 4 Λειτουργία Βιβλιοθήκης 5 Task graphs 6 Links 20 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Load balancing Το runtime των Τs υλοποιεί δύο μηχανισμούς για load-balancing: 1 Work stealing: Εξασφαλίζει ισοκατανομή φορτίου 2 Recursive splitting: Επιτρέπει την επεξεργασία πάνω σε αυθαίρετα μικρά κομμάτια και τη βέλτιστη εκμετάλλευση της cache 21 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A Με parallel_for στον πίνακα Α το range του πίνακα διασπάται αναδρομικά μέχρι να γίνει Grainsize Σε κάθε εκτέλεση της αναδρομής το range διασπάται σε δύο subranges και δημιουργούνται 2 tasks Τα worker threads διατηρούν double-ended queues με τα tasks Κάθε worker παίρνει το task από τη βάση της ουράς και το εκτελεί A P0 P1 P2 P3 Αν δεν το βρει, τότε κλέβει κάποιο από την κορυφή της ουράς ενός τυχαίου worker 22 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A A P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A N/2 N P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C N/2 N C P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D D P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D E 0 N/4 E D P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D E 0 N/4 E D P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D E 0 N/4 E D P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D 0 N/4 E D P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D 0 N/4 E D F F P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D F 0 N/4 E D G N/8 G F P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C D F 0 N/4 E D G N/8 G F P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

parallel_for Work Stealing και Recursive Splitting 0 N A 0 N/2 C F 0 N/4 E D G D N/8 G F P0 P1 P2 P3 23 10/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Γενικά για τα reading uilding locks 2 Tasks 3 Parallel For 4 Λειτουργία Βιβλιοθήκης 5 Task graphs 6 Links 24 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Task groups Ṡ A C D E F 25 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Nested Task Groups A D Ṡ F C E S(); task_group g; grun ( [&] { C(); E(); }); grun ( [&] { task_group g1; g1run ( [&] { A(); } ); g1run ( [&] { (); } ); g1wait(); D(); }); gwait(); F(); 26 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Generic Task Graphs - Flow graph graph g; broadcast_node <continue_msg> s; A D Ṡ F C E continue_node <continue_msg> a(g,a()); continue_node <continue_msg> a(g,()); continue_node <continue_msg> a(g,c()); continue_node <continue_msg> a(g,d()); continue_node <continue_msg> a(g,e()); continue_node <continue_msg> a(g,f()); make_edge(s,a); make_edge(s,b); make_edge(s,c); make_edge(a,d); make_edge(b,d); make_edge(c,e); make_edge(d,f); make_edge(e,f); S(); stry_put(continue_msg()); gwait_for_all(); //fire! 27 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Task Objects + Reference counts 0 1 1 1 1 1 1 2 2 2 2 2 2 MeshTask* Mesh[4][4]; //for all tasks in mesh: //allocate //initialize south, east pointers //set reference counters Mesh[3][3]-> spawn_and_wait_for_all(*mesh[0][0]); //execute last task Mesh[3][3]->execute(); 2 2 2 class MeshTask: public task { public: const int i,j; //coordinates MeshTask * south, east; task* execute() { double north_val = (i==0)? 0 : A[i-1][j]; double west_val = (j==0)? 0 : A[i][j-1]; A[i][j]=do_work(north_val,west_val); if (south!=null) if (!south->decrement_ref_count()) spawn(*south); if (east!=null) if (!east->decrement_ref_count()) spawn(*east); return NULL; } } 28 10/2016 Συστήματα Παράλληλης Επεξεργασίας

Χρήσιμα links για τα Ts Home http://wwwthreadingbuildingblocksorg/ Documentation http://wwwthreadingbuildingblocksorg/documentation Forum http://so wareintelcom/en-us/forums/intel-threading- building-blocks/ 29 10/2016 Συστήματα Παράλληλης Επεξεργασίας