openmp
play

OpenMP - PowerPoint PPT Presentation

OpenMP


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

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

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

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

  5. Προγραµµατισµός σε Μοιραζόµενη Μνήµη void thread1( int *shared var) { void thread2( int *shared var) { int i; int i; for (i=0; i < LOOPS; i++) for (i=0; i < LOOPS; i++) *shared var − = 7; *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

  6. Προγραµµατισµός σε Μοιραζόµενη Μνήµη void thread1( int *shared var) { void thread2( int *shared var) { int i; int i; for (i=0; i < LOOPS; i++) for (i=0; i < LOOPS; i++) *shared var − = 7; *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

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

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

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

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

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

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

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

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

  15. 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

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

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

  18. #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

  19. #pragma omp for : Παράδειγµα i is considered private for the du- # pragma omp parallel ration of the loop. { # 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]; } All other objects ( a,b,c,d ) are shared by default OpenMP – p. 15

  20. #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

  21. #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

  22. #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

  23. #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

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

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

  26. #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

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

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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend