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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

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

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

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

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

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

Υ07 Παράλληλα Συστήματα /3/2018 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (IΙ)

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

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

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

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

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

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

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

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

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

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

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

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

Εισαγωγή στην Πληροφορική

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

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

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

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

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 10/3/2017

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

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

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

ιορθώσεις επί της 2 ης έκδοσης εκτύπωσης 2002

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

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

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

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

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

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

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

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

Πολυπύρηνοι επεξεργαστές Multicore processors

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

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

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

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

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

ΣΥΣΤΗΜΑΤΑ ΠΑΡΑΛΛΗΛΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ 9o εξάμηνο ΗΜΜΥ, ακαδημαϊκό έτος

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

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

Transcript:

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

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

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

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

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

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

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

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

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

Τυπική δοµή κώδικα OpenMP #include <omp.h> main(){ #pragma omp parallel num_threads(2){ } omp_set_num_threads(4); #pragma omp parallel{ } } 29/11/2004 Εισαγωγή στο OpenMP 10 10

Πρότυπο 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 Εισαγωγή στο OpenMP 11 11

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

Παράδειγµα Hello world #include <omp.h> #include <stdio.h> int main(int argc,char** argv) { #pragma omp parallel printf( Hello world from thread %d\n, omp_get_thread_num()); return 0; } 29/11/2004 Εισαγωγή στο OpenMP 13 13

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

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

Παράδειγµα for loop 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 Εισαγωγή στο OpenMP 16 16

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

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

Παράδειγµα progress report #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(); } 29/11/2004 Εισαγωγή στο OpenMP 19 19

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

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

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

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

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

Παράδειγµα 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); } 29/11/2004 Εισαγωγή στο OpenMP 25 25

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

Παράδειγµα χρονοµέτρηση #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 Εισαγωγή στο OpenMP 27 27

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

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

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

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

Παράδειγµα 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]); } } 29/11/2004 Εισαγωγή στο OpenMP 32 32

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

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

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

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

Βιβλιοθήκη χρόνου εκτέλεσης Περιβάλλον εκτέλεσης 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 Εισαγωγή στο OpenMP 37 37

Μεταβλητές συστήµατος ροµολόγηση 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 Εισαγωγή στο OpenMP 38 38

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

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

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

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

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

Εκτέλεση υβριδικού προγράµµατος 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 Εισαγωγή στο OpenMP 44 44

Σχετικοί σύνδεσµοι http://www.openmp.org (OpenMP standards) http://www.compunity.org (Community of OpenMP users) http://oscinfo.osc.edu/training (υλικό από Ohio Supercomputing Center) 29/11/2004 Εισαγωγή στο OpenMP 45 45