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

Σχετικά έγγραφα
Συστήµατα Παράλληλης Επεξεργασίας. OpenMP

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

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

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

OpenMP. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων. Αθήνα, Νοέµβριος /11/2004 Εισαγωγή στο OpenMP 1

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

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

Προγραμματισμός με το OpenMP Β. Δημακόπουλος

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP

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

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

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

EM 361: Παράλληλοι Υπολογισμοί

Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο)

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

2/4/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (ΙΙ) OpenMP Β. Δημακόπουλος

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

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

Ε-85: Ειδικά Θέµατα Λογισµικού

Ε-85: Ειδικά Θέµατα Λογισµικού

ΥΛΟΠΟΙΗΣΗ ΣΥΝΤΑΚΤΙΚΟΥ ΑΝΑΛΥΤΗ ΓΙΑ ΤΟΝ ΠΑΡΑΛΛΗΛΟΠΟΙΗΤΙΚΟ ΜΕΤΑΦΡΑΣΤΗ OMPI Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙ ΙΚΕΥΣΗΣ. Υποβάλλεται στην

Ορολογία. Παράδειγµα 3. Εξισορρόπηση Εργασίας. Ε-85: Ειδικά Θέµατα Λογισµικού. E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 6

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

Ε-85: Ειδικά Θέµατα Λογισµικού

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

Υλοποίηση cancellation στον παραλληλοποιητικό μεταφραστή OMPi. Εμμανουήλ Φελουτζή. με Α.Μ: 1579 ΔΙΠΛΩΜΑΤΟΣ

ΣυγχρονισµόςσεΣυστήµατα ΠολλαπλώνΝηµάτων

Κατανεμημένος και. Ηλίας Κ. Σάββας Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας

Προγραµµατισµός Νηµάτων. Αρχικοποίηση µιας Φοράς pthread_once_t once_block = PTHREAD_ONCE_INIT; pthread_mutex_t mutex;

Αποδοτική εκτέλεση προγραμμάτων OpenMP σε συστάδες Η/Υ

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

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

Ατομική Διπλωματική Εργασία. Dataflow Υλοποίηση της εφαρμογής OCEAN με την χρήση πλατφόρμας TFlux. Έλση Πραιτωρίτη ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

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

Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

2. Στοιχεία Αρχιτεκτονικής Παράλληλων Υπολογιστών... 45

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

Parallel Implementation of John Conway s Game of Life

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

Ε-85: Ειδικά Θέµατα Λογισµικού

Περίληψη. Υπερυπολογιστές. Υπολογιστικά προβλήµατα. TOP 500 (Ιούνιος 2007) TOP 500 (Ιούνιος 2009) Ε-85: Ειδικά Θέµατα Λογισµικού

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

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

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

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

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

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

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

Ανάλυση ροής δεδομένων και autoscoping στον παραλληλοποιητικό μεταφραστή OMPi

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό Πολυεπεξεργαστικών Συστηµάτων Κοινής Μνήµης µε...

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Ε-85: Ειδικά Θέµατα Λογισµικού

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

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις

Οδηγός OpenMp. Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

3 η ΑΣΚΗΣΗ. Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Κατηγορίες Νηµάτων. Νήµατα Επιπέδου Πυρήνα. Νήµατα Επιπέδου Χρήστη. «Νήµατα Επιπέδου Χρήστη» Ε-85: Ειδικά Θέµατα Λογισµικού

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

Θέματα Μεταγλωττιστών

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

Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

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

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 4 η : Παράλληλος Προγραμματισμός. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

EM 361: Παράλληλοι Υπολογισμοί

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

Διάλεξη 9η: Πίνακες (arrays)

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

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

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

Transcript:

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

Αρχιτεκτονικές Κατανεµηµένης Μνήµης Node Node L2 Memory L2 Memory Network OpenMP p. 2

Αρχιτεκτονικές Μοιραζόµενης Μνήµης CPU CPU L2... L2 Memory OpenMP p. 3

Αρχιτεκτονικές Μοιραζόµενης Μνήµης... LOAD X... STORE Y... CPU CPU... STORE X... LOAD Y... L2... L2 Memory OpenMP p. 3

Προγραµµατισµός σε Μοιραζόµενη Μνήµη void thread1(int *shared var) { int i; void thread2(int *shared var) { int i; for (i=0; i<loops; i++) *shared var = 7; for (i=0; i<loops; i++) *shared var += 7; int main(){ int shared var = 13; CREATE THREAD(thread1,shared var) CREATE THREAD(thread2,shared var) WAIT THREADS(thread1,thread2) printf("shared_var=%d\n", shared var); return 0; OpenMP p. 4

Προγραµµατισµός σε Μοιραζόµενη Μνήµη void thread1(int *shared var) { int i; void thread2(int *shared var) { int i; for (i=0; i<loops; i++) *shared var = 7; for (i=0; i<loops; i++) *shared var += 7; kkourt@twin3: /src/tests$ for i in $(seq 10); do./test1 ; done shared var=353891 shared var=360660 shared var=362683 shared var=360688 shared var=356124 shared var=321159 shared var=357552 shared var=-458739 shared var=355585 shared var=361871 OpenMP p. 4

Posix Threads Χαµηλού επιπέδου διεπαφή για το χειρισµό νηµάτων. Παραδείγµατα Συναρτήσεων: pthread create() pthread mutex {lock,unlock() pthread cond {wait,signal() pthread barrier wait() εν µπορεί εύκολα να χρησιµοποιηθεί για την παραλληλοποίηση σειριακών εφαρµογών. εν είναι αρκετά απλή για να χρησιµοποιηθεί από επιστήµονες, που θέλουν να παραλληλοποιήσουν τις εφαρµογές τους. OpenMP p. 5

OpenMP Πρότυπο για προγραµµατισµό σε µοιραζόµενη µνήµη. Ορίζει συγκεκριµένη διεπαφή(api) και όχι υλοποίηση Ο παραλληλισµός δηλώνεται ρητώς(explicitly) από τον προγραµµατιστή Γλώσσες: C/C++, Fortran MP = MultiProcessor Τα προγράµµατα του OpenMP: Mπορούν να µεταφρασθούν από µεταγλωττιστή που δεν το υποστηρίζεi. Μπορούν να εκτελεσθούν σειριακά. Εφαρµόζεται κυρίως σε εφαρµογές µε µεγάλους πίνακες. OpenMP p. 6

Μοντέλο Εκτέλεσης Worker Threads Parallel Regions Main Thread Synchronization OpenMP p. 7

Μοντέλο εδοµένων Private Memory Private Variables P0 P1 P2 P3 T0 T1 T2 T3 Threads Shared Memory Shared Variables OpenMP p. 8

Μοντέλο εδοµένων Private Memory Οι αλλαγές στα αντικείµενα που βρίσκονται στην κοινή µνήµη δεν γίνονται (γενικά) αντιλυπτά στο σύνολο των νηµάτων. (volatile, flush) Private Variables P0 P1 P2 P3 T0 T1 T2 T3 Threads Shared Memory Shared Variables OpenMP p. 8

Αρχιτεκτονική Application User Directive Compiler Enviroment Runtime Library Operating System Thread Support OpenMP p. 9

Βασικές Έννοιες Παράλληλη Περιοχή(Parallel Region): Κώδικας που εκτελείται από πολλαπλά νήµατα. Κατανοµή Εργασίας(Work Sharing): Η διαδικασία κατά την οποία κατανήµεται η εργασία στα νήµατα σε µια παράλληλη περιοχή. Οδηγία Μεταγλωττιστή(Compiler Directive): Η διεπαφή για την χρήση του OpenMP σε προγράµµατα. ΓιατηνC: #pragma omp <directive> <clauses> Construct: #pragma omp... <C statement> OpenMP p. 10

Παράλληλες Περιοχές directive: #pragma omp parallel o Αριθµός των νηµάτων καθορίζεται: Από το num threads clause Μετηχρήσητης omp set num threads() Με τη µεταβλητή περιβάλλοντος OMP NUM THREADS (Χρόνος Εκτέλεσης) Υπονοείται barrier στο τέλος της περιοχής. (Το barrier υπονοεί flush). OpenMP p. 11

Hello World! #include <omp.h> #include <stdio.h> int main() { #pragma omp parrallel printf("hello world! (thread_id: %d)\n", omp get thread num()); return 0; OpenMP p. 12

Κατανοµή Εργασίας directives: #pragma omp for #pragma omp sections #pragma omp single Τα directives για την κατανοµή εργασίας, περιέχονται σε µία παράλληλη περιοχή. εν δηµιουργούνται νέα νήµατα εν υπονοείται barrier στην είσοδο Υπονοείται barrier στην έξοδο (εκτός αν υπάρχει nowait) OpenMP p. 13

#pragma omp for Χρησιµοποιείται για την κατανοµή των επαναλήψεων ενός for loop στα νήµατα. Τοloopθαπρέπειναείναισεκανονικήµορφή.(Θαπρέπει να µπορούν να υπολογιστούν οι επαναλήψεις στην είσοδο τουloop). Σχετικά Clauses: schedule: Ορίζει πως κατανέµονται οι επαναλήψεις στα νήµατα(static, dynamic, guided, runtime). OpenMP p. 14

#pragma omp for: Παράδειγµα #pragma omp parallel { #pragma omp for for (i=0; i<n; i++) b[i] = (a[i]+a[i 1])/2.0; #pragma omp for for (i=0; i<n; i++) d[i] = 1.0/c[i]; OpenMP p. 15

#pragma omp for: Παράδειγµα #pragma omp parallel { #pragma omp for for (i=0; i<n; i++) b[i] = (a[i]+a[i 1])/2.0; i is considered private for the duration of the loop. #pragma omp for for (i=0; i<n; i++) d[i] = 1.0/c[i]; All other objects (a,b,c,d) are shared by default OpenMP p. 15

#pragma omp for: Παράδειγµα(2) #pragma omp parallel { #pragma omp for for (i=2; i<10; i++) factorial[i] = i*factorial[i 1] OpenMP p. 16

#pragma omp for: Παράδειγµα(2) #pragma omp parallel { #pragma omp for for (i=2; i<10; i++) factorial[i] = i*factorial[i 1] Εξάρτηση εδοµένων µεταξύ επαναλήψεων! OpenMP p. 16

#pragma omp for: Παράδειγµα(3) int i, temp; #pragma omp parallel for for (i=0; i<100; i++){ temp = array[i]; array[i] = do something(temp); OpenMP p. 17

#pragma omp for: Παράδειγµα(3) int i; #pragma omp parallel for for (i=0; i<100; i++){ int temp = array[i]; // private array[i] = do something(temp); OpenMP p. 17

#pragma omp {sections,single #pragma omp sections: Ορίζει µία η περισσότερες περιοχές που κατανέµονται µεταξύ των νηµάτων. #pragma omp single: Ορίζειµιαπεριοχή,ηοποίαθαεκτελεσθείµόνοαπόένα νήµα(όχι απαραίτητα το master). OpenMP p. 18

#pragma omp sections: Παράδειγµα #pragma omp parallel { #pragma omp sections { #pragma omp section do work(); #pragma omp section do other work(); OpenMP p. 19

#pragma omp single: Παράδειγµα #pragma omp parallel { #pragma single printf("starting...: "); do work1(); #pragma single printf("work1 done, "); do work2(); #pragma single printf("work2 done. Finished\n"); OpenMP p. 20

Συντοµέυσεις #pragma omp parallel #pragma omp for for (...) #pragma omp parallel #pragma omp sections for (...) #pragma omp parallel for for (...) #pragma omp parallel sections for (...) OpenMP p. 21

Constructs Συγχρονισµού #pragma omp barrier: Συγχρονισµός νηµάτων #pragma omp master: Κώδικας που εκτελείται µόνο από το κύριο νήµα #pragma omp critical: Κώδικας που δεν εκτελείται παράλληλα #pragma omp atomic: Ατοµική λειτουργία σε θέση µνήµης(++,,+=,...) #pragma omp flush: Επιβολή συνεπής εικόνας των µοιραζόµενων αντικειµένων. #pragma omp ordered: Επιβολή σειριακής εκτέλεσης βρόχου for OpenMP p. 22

#pragma omp barrier: Παράδειγµα #pragma omp parallel { #pragma omp barrier #pragma omp master gettimeofday(start,(struct timezone*)null); work(); #pragma omp barrier #pragma omp master { gettimeofday(finish,(struct timezone*)null); print stats(start,finish); OpenMP p. 23

#pragma omp critical: Παράδειγµα #pragma omp parallel shared(x, y) private(x next, y next) { #pragma omp critical (xaxis) x next=dequeue(x); work(x next); #pragma omp critical (yaxis) y next=dequeue(y); work(y next); OpenMP p. 24

#pragma omp atomic: Παράδειγµα #pragma omp parallel for shared(x, y, index, n) for(i=0;i<n;i++){ #pragma omp atomic x[index[i]] += work1(i); y[i]+=work2(i); OpenMP p. 25

#pragma omp ordered: Παράδειγµα #pragma omp parallel { #pragma omp for for(i=0;i<n;i++) a[i]=compute(i); #pragma omp for ordered for(i=0;i<n;i++){ #pragma omp ordered printf("a[%d]=%d\n",i,a[i]); OpenMP p. 26

Κλάσεις Ιδιωτικών Μεταβλητών private: Η µεταβλητή είναι ιδωτική για κάθε νήµα. lastprivate: private + Η τιµή του αντικειµένου τελικά πέρνει την τιµή πουθαείχεαντοπρόγραµµαήτανσειριακό(πχ.τηντιµή από την τελευταία επανάληψη). firstprivate: private +Ητιµήτουαντικειµένουγιακάθενήµα αρχικοποιείται στην τιµή που είχε πριν την έναρξη της παράλληλης περιοχής. OpenMP p. 27

#pragma omp ordered: Παράδειγµα a = 10; #pragma omp parallel { #pragma omp for private(i) firstprivate(a) lastprivate(b) for (i=0; i<n; i++){ b = a + i; c = b; OpenMP p. 28

Reduction Αναφέρεται σε εντολές της µορφής: x = x <op> expr, <op> = +,*,&&,... Κάθε µεταβλητή µπορεί να ανήκει το πολύ σε ένα reduction clause. Για κάθε µεταβλητή δηµιουργείται αντίστοιχη τοπική µεταβλητή σε κάθε νήµα και αρχικοποιείται ανάλογα µε τελεστή op. Παράδειγµα: #pragma omp parallel for reduction(+:sum) for(i=1;i<n;i++){ sum=sum+a(i); OpenMP p. 29

Βιβλιοθήκη Χρόνου Εκτέλεσης Περιβάλλον Εκτέλεσης(runtime enviroment): omp set num threads() omp get thread num() omp set dynamic() Συγχρονισµός µε κλειδώµατα(locking) omp init lock() omp set lock() omp test lock() Χρονοµέτρηση: omp get wtime() omp get wtick() OpenMP p. 30

Μεταβλητές Συστήµατος ροµολόγηση: OMP SCHEDULE=static OMP SCHEDULE=static,100 υναµική πολυνηµατική εκτέλεση: OMP DYNAMIC=TRUE Πλήθος νηµάτων: OMP NUM THREADS=2 OpenMP p. 31

Υβριδικές Αρχιτεκτονικές Node Node L2... L2 Memory... L2... L2 Memory Network OpenMP p. 32

Προγραµµατισµός µε βάση το Υβριδικό Μοντέλο OpenMP στο Εσωτερικό του Κόµβου. MPI για την επικοινωνία µεταξύ των κόµβων. Το µοντέλο εξαρτάτε από την πολυνηµατική υποστήριξη της βιβλιοθήκης ανταλλαγής µηνυµάτων: single(mpi THREAD SINGLE) masteronly funneled(mpi THREAD FUNNELED) serialized(mpi THREAD SERIALIZED) multiple(mpi THREAD MULTIPLE) OpenMP p. 33