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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Advertisements

Εισαγωγή στις Τεχνολογίες της Πληροφορικής και των Επικοινωνιών
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 1ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 5 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11.
Υλοποίηση μεταφραστή C με επεκτάσεις OpenMP Λεοντιάδης Ηλίας Τζούμας Γεώργιος Πτυχιακή εργασία Τελική παρουσίαση Υπεύθυνος καθηγητής Β. Β. Δημακόπουλος.
Εισαγωγή στους Η/Υ Πίνακες.
Επικοινωνία μεταξύ Διεργασιών και Σύνδρομες Διεργασίες
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Message Passing Interface (MPI)
ΜΑΘ-3122/106 Προγραμματισμός
1/12/2003Εισαγωγή στο OpenMP1 OpenMP Αθήνα, Νοέμβριος 2003 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
Υποθετικός Πολυνηματισμός. Τα προβλήματα του παράλληλου προγραμματισμού  Εντοπισμός παραλληλισμού – χειροκίνητα (επισκόπηση) – αυτόματα (compiler) 
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
24/11/2003Message Passing Interface (MPI)1 Αθήνα, Νοέμβριος 2003 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
22/11/2004Message Passing Interface (MPI)1 Αθήνα, Νοέμβριος 2004 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
ΕΠΛ223 - Θεωρία και Πρακτική Μεταγλωττιστών9-1 Στατικός Έλεγχος Με τον όρο στατικός έλεγχος (static checking) χαρακτηρίζεται ο έλεγχος της συντακτικής.
Βρόχος με συνθήκη εισόδου στη C, οδηγούμενος από μετρητή: for
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 11 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 1.
NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 1.  Ένα thread έχει: ID, program counter, register set, stack  Μοιράζεται με τα άλλα threads της ίδιας διεργασίας.
Νήματα Οι διεργασίες έχουν τα παρακάτω συστατικά:
Εισαγωγικές Έννοιες Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
Π ΑΡΑΛΛΗΛΗ / ΚΑΤΑΝΕΜΗΜΕΝΗ ΕΠΕΞΕΡΓΑΣΙΑ ΚΑΙ ΕΦΑΡΜΟΓΕΣ Εισαγωγή στο OpenMP.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
1 Ολυμπιάδα Πληροφορικής Μάθημα 7. 2 Στόχοι μαθήματος Δημιουργία συναρτήσεων από το χρήστη Δομή προγράμματος με συναρτήσεις Συναρτήσεις και παράμετροι.
Ολυμπιάδα Πληροφορικής
ΔΕΞΙΟΤΗΤΕΣ ΕΠΙΚΟΙΝΩΝΙΑΣ 1 ΠΕΡΙΓΡΑΦΗ ΤΩΝ ΜΝΗΜΩΝ ΕΝΟΣ Η/Υ ΤΜΗΜΑ: Τ6 ΟΝΟΜΑΤΑ: ΣΕΛΑΛΜΑΖΙΔΗΣ ΤΑΣΟΣ ΦΙΛΙΑΣ ΑΝΤΩΝΗΣ ΦΙΛΙΑΣ ΑΝΤΩΝΗΣ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ.
ΣΥΝΑΡΤΗΣΕΙΣ.
Πάνω προς Κάτω Σχεδιασμός και Συναρτήσεις
Message Passing Interface (MPI) Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων Αθήνα, Δεκέμβριος 2002.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Επικοινωνία μεταξύ Διεργασιών και Σύνδρομες Διεργασίες Interprocess Communication and Concurrent Processes.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Διδακτική της Πληροφορικής ΗΥ302 Εργασία :Παρουσίαση σχολικού βιβλίου Γ’ Λυκείου Τεχνολογικής Κατεύθυνσης «Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον»
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ. ΥΠΟΛΟΓΙΣΤΗΣ Μηχανή που μπορεί να φέρει σε πέρας πνευματικές εργασίες ρουτίνας με μεγάλη ταχύτητα.
Σύγχρονες Προκλήσεις. Εισαγωγή Οι CMP είναι πια πραγματικότητα – Intel Core 2, Quad, Nehalem – IBM Power5, Power6 – Sun Niagara, Niagara2, Rock –
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
Δομές Δεδομένων 1 Θέματα Απόδοσης. Δομές Δεδομένων 2 Οργανώνοντας τα Δεδομένα  Η επιλογή της δομής δεδομένων και του αλγορίθμου επηρεάζουν το χρόνο εκτέλεσης.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Παράλληλη/Κατανεμημένη Επεξεργασία και Εφαρμογές
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Εφαρμογές Υπολογιστών Ά Λυκείου Κεφ. 4 Λογισμικό Συστήματος
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
Νήματα με την χρήση των Posix Threads (pthreads)‏.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ -150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
ΠΑΡΑΛΛΗΛΗ ΕΠΕΞΕΡΓΑΣΙΑ Ενότητα 3 – OpenMP (I) 04/03/2015 Ιωάννης Ε. Βενέτης Τμήμα Μηχανικών Η / Υ και Πληροφορικής.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Πληροφορική 2 Γλώσσες Προγραμματισμού 1. Γλώσσες προγραμματσιμού  Επιτρέπουν την κωδικοποίηση των αλγορίθμων  Η εκτέλεση ενός προγράμματος θα πρέπει.
Τεχνολογία και Προγραμματισμός Υπολογιστών
Κατανεμημένα Συστήματα
ΠαρΑλληλη ΕΠΕΞΕΡΓΑΣΙΑ
The University of Adelaide, School of Computer Science
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Ψηφιακή Σχεδίαση Εργαστήριο Τετάρτη 9/12/2015.
Τεχνολογία και Προγραμματισμός Υπολογιστών
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕ ΤΗ C
Διπλωματική Εργασία για το Μεταπτυχιακό Δίπλωμα Ειδίκευσης
Επιβλέπων: Καθηγητής Εφαρμογών Δρ. Δημήτριος Βαρσάμης
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Μεταγράφημα παρουσίασης:

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

29/11/2004Εισαγωγή στο OpenMP2 Παράλληλες αρχιτεκτονικές Αρχιτεκτονική κατανεμημένης μνήμης (distributed memory systems, π.χ. cluster)

29/11/2004Εισαγωγή στο OpenMP3 Παράλληλες αρχιτεκτονικές (2) Αρχιτεκτονική μοιραζόμενης μνήμης (shared memory systems, π.χ. SMP)

29/11/2004Εισαγωγή στο OpenMP4 Παράλληλες αρχιτεκτονικές (3) ΥπέρΚατά Σύστημα Κατανεμημένης Μνήμης Επεκτάσιμο σε μεγάλο πλήθος επεξεργαστών Συχνά παράλληλα μονοπάτια Ι/Ο Δύσκολο σε προγραμματισμό και αποσφαλμάτωση Περιορισμένη ευελιξία σε υψηλές απαιτήσεις μνήμης Συχνά απαιτεί πολλαπλές εικόνες του συστήματος Σύστημα Μοιραζόμενης Μνήμης Σχετικά εύκολο σε προγραμματισμό και αποσφαλμάτωση Μεγαλύτερη ευελιξία σε υψηλές απαιτήσεις μνήμης Καθολική εικόνα συστήματος Μη επεκτάσιμο σε μεγάλο πλήθος επεξεργαστών Συχνά υπάρχει μοναδικό μονοπάτι Ι/Ο

29/11/2004Εισαγωγή στο OpenMP5 Υβριδική αρχιτεκτονική (DSM systems, π.χ. SMP cluster) Παράλληλες αρχιτεκτονικές (4)

29/11/2004Εισαγωγή στο OpenMP6 Παράλληλες αρχιτεκτονικές (5)

29/11/2004Εισαγωγή στο OpenMP7 Τι είναι το OpenMP; Είναι πρότυπο, όχι συγκεκριμένη υλοποίηση Παρέχει API για πολυνηματικό προγραμματισμό (multithreaded programming) με  οδηγίες σε μεταγλωττιστή (compiler directives)  βιβλιοθήκη χρόνου εκτέλεσης (run-time library)  μεταβλητές συστήματος (environment variables) Υποστηρίζει C, C++ και Fortran Προγράμματα γραμμένα σε OpenMP μπορούν να εκτελεστούν και σειριακά

29/11/2004Εισαγωγή στο OpenMP8 Τι είναι το OpenMP; (2) Απευθύνεται κυρίως σε εφαρμογές με πίνακες (array-based applications) Παραλληλοποίηση αρχικού προβλήματος και δυναμική απεικόνιση σε νήματα εκτέλεσης (threads) Τοπικά (local) και μοιραζόμενα (shared) δεδομένα Συγχρονισμός απαιτείται για  ορθή πρόσβαση στα μοιραζόμενα δεδομένα  είσοδο-έξοδο (Ι/Ο)

29/11/2004Εισαγωγή στο OpenMP9 Πολυνηματικό μοντέλο Τα νήματα επικοινωνούν με μοιραζόμενες μεταβλητές (shared variables) Μοιραζόμενες μεταβλητές οδηγούν σε ανεπιθύμητες race conditions  απαιτείται συγχρονισμός των νημάτων Ο συγχρονισμός είναι «ακριβός»  απαιτείται προσδιορισμός κατάλληλου τρόπου πρόσβασης δεδομένων

29/11/2004Εισαγωγή στο OpenMP10 Τυπική δομή κώδικα OpenMP #include main(){ … #pragma omp parallel num_threads(2){ … } … omp_set_num_threads(4); #pragma omp parallel{ … } … }

29/11/2004Εισαγωγή στο OpenMP11 Πρότυπο 2.0 OpenMP Εντολές σε μεταγλωττιστή (compiler directives)  Παράλληλες περιοχές (parallel regions)  Κατανομή εργασίας (work sharing constructs)  Παράλληλες περιοχές κατανομής εργασίας (parallel work sharing constructs)  Σειριακή εκτέλεση – συγχρονισμός (master and synchronization directives)  Περιβάλλον δεδομένων (data environment) Βιβλιοθήκη χρόνου εκτέλεσης (run-time library) Μεταβλητές συστήματος (environment variables)

29/11/2004Εισαγωγή στο OpenMP12 #pragma omp parallel Δημιουργεί ομάδα νημάτων Αριθμός νημάτων καθορίζεται κατά σειρά προτεραιότητας από: num_threads σε directive συνάρτηση βιβλιοθήκης omp_set_num_threads() μεταβλητή συστήματος OMP_NUM_THREADS Υπονοείται flush κατά την είσοδο και έξοδο από την παράλληλη περιοχή Φωλιασμένες παράλληλες περιοχές σειριοποιούνται Παράλληλες περιοχές

29/11/2004Εισαγωγή στο OpenMP13 #include int main(int argc,char** argv) { #pragma omp parallel printf(“Hello world from thread %d\n”, omp_get_thread_num()); return 0; } Παράδειγμα – Hello world

29/11/2004Εισαγωγή στο OpenMP14 #pragma omp for #pragma omp sections #pragma omp single Κατανομή εργασίας μεταξύ υπαρχόντων νημάτων Δε δημιουργούνται νέα νήματα Υπονοείται flush μόνο κατά την έξοδο από περιοχή κατανομής εργασίας (όχι κατά την είσοδο) Κατανομή εργασίας

29/11/2004Εισαγωγή στο OpenMP15 #pragma omp for [schedule(…)] [nowait] for-loop Κατανομή εργασίας (2) Κατανέμει επαναλήψεις εντολής for σε ομάδα νημάτων Εντολή for σε κανονική μορφή (canonical form) schedule : καθορίζει τρόπο κατανομής επαναλήψεων  static[,chunk] : round-robin στατική κατανομή  dynamic[,chunk] : δυναμική κατανομή σε ανενεργά νήματα  guided[,chunk] : δυναμική κατανομή με εκθετική μείωση  runtime : κατανομή καθορίζεται σε χρόνο εκτέλεσης nowait : αποτρέπει συγχρονισμό κατά την έξοδο

29/11/2004Εισαγωγή στο OpenMP16 for(i=1;i<n;i++) b[i]=(a[i]+a[i-1])/2.0; Παράδειγμα – for loop #pragma omp parallel { #pragma omp for for(i=1;i<n;i++) b[i]=(a[i]+a[i-1])/2.0; }

29/11/2004Εισαγωγή στο OpenMP17 #pragma omp sections [nowait] { #pragma omp section structured-block #pragma omp section structured-block } Κατανομή εργασίας (3) Ορίζει μία η περισσότερες ανεξάρτητες περιοχές section που κατανέμονται μεταξύ των νημάτων Κάθε περιοχή section ανατίθεται σε διαφορετικό νήμα nowait : αποτρέπει συγχρονισμό κατά την έξοδο

29/11/2004Εισαγωγή στο OpenMP18 #pragma omp single [nowait] structured-block Ορίζει τμήμα κώδικα που εκτελείται από μόνο ένα νήμα της ομάδας nowait : αποτρέπει συγχρονισμό κατά την έξοδο Κατανομή εργασίας (4)

29/11/2004Εισαγωγή στο OpenMP19 #pragma omp parallel { #pragma omp single printf(“Beginning work1.\n”); work1(); #pragma omp single printf(“Finished work1.\n”); #pragma omp single nowait printf(“Finished work1, beginning work2.\n”); work2(); } Παράδειγμα – progress report

29/11/2004Εισαγωγή στο OpenMP20 #pragma omp parallel for for-loop #pragma omp parallel sections { #pragma omp section structured-block … } Δημιουργεί ομάδα νημάτων και κατανέμει εργασία σε αυτά Υπονοείται flush σε είσοδο και έξοδο Παράλληλες περιοχές κατανομής εργασίας

29/11/2004Εισαγωγή στο OpenMP21 Παράδειγμα – for loop (2) #pragma omp parallel for for(i=1;i<n;i++) b[i]=(a[i]+a[i-1])/2.0; #pragma omp parallel { #pragma omp for for(i=1;i<n;i++) b[i]=(a[i]+a[i-1])/2.0; }

29/11/2004Εισαγωγή στο OpenMP22 #pragma omp master #pragma omp critical #pragma omp barrier #pragma omp atomic #pragma omp flush #pragma omp ordered Σειριακή εκτέλεση – συγχρονισμός

29/11/2004Εισαγωγή στο OpenMP23 #pragma omp master structured-block Ορίζει τμήμα κώδικα που εκτελείται από το κύριο νήμα της ομάδας (master thread) Δεν υπονοείται συγχρονισμός (flush) τόσο κατά την είσοδο, όσο και κατά την έξοδο Σειριακή εκτέλεση – συγχρονισμός (2)

29/11/2004Εισαγωγή στο OpenMP24 #pragma omp critical [name] structured-block Σε κάθε χρονική στιγμή, το πολύ ένα νήμα μπορεί να βρίσκεται μέσα σε μια critical περιοχή με συγκεκριμένο όνομα name Σε όλες τις «ανώνυμες» περιοχές αποδίδεται από το μεταγλωττιστή κοινό όνομα Υπονοείται συγχρονισμός (flush) τόσο κατά την είσοδο, όσο και κατά την έξοδο Σειριακή εκτέλεση – συγχρονισμός (3)

29/11/2004Εισαγωγή στο OpenMP25 #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); } Παράδειγμα – critical

29/11/2004Εισαγωγή στο OpenMP26 #pragma omp barrier Συγχρονίζει όλα τα νήματα μιας ομάδας Δεν μπορεί να είναι άμεση υπο-εντολή εντολής if Υπονοεί flush Σειριακή εκτέλεση – συγχρονισμός (4)

29/11/2004Εισαγωγή στο OpenMP27 #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); } Παράδειγμα – χρονομέτρηση

29/11/2004Εισαγωγή στο OpenMP28 #pragma omp atomic expression-stmt expression-stmt: Εντολή της μορφής x op = expr (op:+,*,-,/,&,^,|, >) x++ ή ++x x-- ή --x Ενημερώνει ατομικά περιοχή μνήμης x Υπονοεί flush Σειριακή εκτέλεση – συγχρονισμός (5)

29/11/2004Εισαγωγή στο OpenMP29 #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); } Παράδειγμα – atomic Τι διαφορά θα είχε αν βάζαμε critical αντί για atomic;

29/11/2004Εισαγωγή στο OpenMP30 #pragma omp flush [(variable-list)] Εξασφαλίζει memory consistency λίστας μεταβλητών για νήματα Μεταγλωττιστές αποκαθιστούν τιμές καταχωρητών στη μνήμη, υλικό αποκαθιστά απομονωτές εγγραφής στη μνήμη Υπονοείται κατά την είσοδο/έξοδο σε/από μερικές OpenMP directives (barrier, critical, ordered, parallel κλπ.) Εναλλακτική δυνατότητα: volatile variables της C Access consistency  flush πριν την προσπέλαση Modify consistency  flush μετά την τροποποίηση Δεν μπορεί να είναι άμεση υπο-εντολή εντολής if Σειριακή εκτέλεση – συγχρονισμός (6)

29/11/2004Εισαγωγή στο OpenMP31 #pragma omp ordered structured-block Πρέπει να περιέχεται στην εμβέλεια ενός for ή parallel for construct Το αντίστοιχο for ή parallel for πρέπει να έχει καθορίσει ordered clause Επιβάλει σειριακή εκτέλεση ενός βρόχου for Σειριακή εκτέλεση – συγχρονισμός (7)

29/11/2004Εισαγωγή στο OpenMP32 #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]); } Παράδειγμα – ordered

29/11/2004Εισαγωγή στο OpenMP33 Directive  #pragma omp threadprivate Clauses  private  firstprivate  lastprivate  shared  default  reduction  copyin  copyprivate Περιβάλλον δεδομένων

29/11/2004Εισαγωγή στο OpenMP34 private (variable-list)  Ανάθεση νέου αντικειμένου για κάθε νήμα  Το πρότυπο αντικείμενο έχει απροσδιόριστη τιμή κατά την είσοδο και έξοδο στο construct, και δεν πρέπει να τροποποιείται firstprivate (variable-list)  Σαν private, κάθε νέο αντικείμενο αρχικοποιείται στην τιμή του προτύπου lastprivate (variable-list)  Σαν private, το πρότυπο αντικείμενο παίρνει τελικά την τιμή που αντιστοιχεί στη σειριακά τελευταία τιμή του construct Περιβάλλον δεδομένων (2)

29/11/2004Εισαγωγή στο OpenMP35 shared (variable list)  Μοιραζόμενη μεταβλητή για όλα τα νήματα της ομάδας default (shared | none) reduction (op: variable-list)  Αναφέρεται σε εντολές τις μορφής x = x op expr, όπου op ένας από τους *, -, &, ^, |, &&, ||  Κάθε μεταβλητή το πολύ σε μια reduction clause  Για κάθε μεταβλητή δημιουργείται αντίστοιχη τοπική μεταβλητή σε κάθε νήμα και αρχικοποιείται ανάλογα με τελεστή op  Μεταβλητή σε λίστα δεν μπορεί να είναι private Περιβάλλον δεδομένων (3)

29/11/2004Εισαγωγή στο OpenMP36 for(i=1;i<n;i++) sum=sum+a(i); Παράδειγμα – reduction #pragma omp parallel for reduction(+:sum) for(i=1;i<n;i++) sum=sum+a(i);

29/11/2004Εισαγωγή στο OpenMP37 Περιβάλλον εκτέλεσης omp_set_num_threads omp_get_thread_num omp_set_dynamic Συγχρονισμός με κλειδώματα omp_init_lock omp_set_lock / omp_test_lock omp_unset_lock nested Χρονομέτρηση omp_get_wtime omp_get_wtick Βιβλιοθήκη χρόνου εκτέλεσης

29/11/2004Εισαγωγή στο OpenMP38 Δρομολόγηση export OMP_SCHEDULE=“static” export OMP_SCHEDULE=“static,100” setenv OMP_SCHEDULE “dynamic,20” setenv OMP_SCHEDULE “guided,50” Δυναμική πολυνηματική εκτέλεση export OMP_DYNAMIC=TRUE setenv OMP_DYNAMIC FALSE Πλήθος νημάτων export OMP_NUM_THREADS=2 Μεταβλητές συστήματος

29/11/2004Εισαγωγή στο OpenMP39 Υβριδικό μοντέλο Διαισθητικά, πιο κατάλληλο για υβριδικές αρχιτεκτονικές από απλό MPI μοντέλο Συχνά απλή εφαρμογή οδηγεί σε περιορισμό παραλληλίας μέσω νόμου Amdahl Θεωρητικά, πιο αποδοτικό για επικοινωνία στο εσωτερικό SMP κόμβου Σημαντικοί περιορισμοί επιβάλλονται και από επίπεδο πολυνηματικής υποστήριξης του MPI

29/11/2004Εισαγωγή στο OpenMP40 Υβριδικό μοντέλο (2)

29/11/2004Εισαγωγή στο OpenMP41 Υβριδικό μοντέλο (3) Επίπεδο υποστήριξης OpenMP από MPI: MPI_THREAD_SINGLE MPI_THREAD_FUNNELED MPI_THREAD_SERIALIZED MPI_THREAD_MULTIPLE

29/11/2004Εισαγωγή στο OpenMP42 Υβριδικό μοντέλο (4) Παράδειγμα κώδικα:

29/11/2004Εισαγωγή στο OpenMP43 Εκτέλεση υβριδικού προγράμματος MPI+OpenMP Linux cluster 8 dual PIII 800MHz κόμβων (twins) Το πολύ 8 διεργασίες MPI x 2 νήματα OpenMP/διεργασία ssh2 danaos.cslab.ntua.gr ; ssh2 twin1 Intel compiler C icc (στο /usr/local/intel/compiler80/ia32/bin) MPI με icc στο /usr/local/mpich-intel για υβριδικό μοντέλο

29/11/2004Εισαγωγή στο OpenMP44 Εκτέλεση υβριδικού προγράμματος MPI+OpenMP (2) Μεταγλώττιση: #/usr/local/mpich-intel/bin/mpicc hybrid.c –o hybrid –O3 –static –Wall Εκτέλεση: # /usr/local/mpich-intel/bin/ mpirun –np 4 – machinefile machines hybrid

29/11/2004Εισαγωγή στο OpenMP45 Σχετικοί σύνδεσμοι (OpenMP standards) (Community of OpenMP users) (υλικό από Ohio Supercomputing Center)