Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


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

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

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

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

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

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

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

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

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

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

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

11 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)

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

13 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

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

15 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 : αποτρέπει συγχρονισμό κατά την έξοδο

16 29/11/2004Εισαγωγή στο OpenMP16 for(i=1;i

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

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

19 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

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

21 29/11/2004Εισαγωγή στο OpenMP21 Παράδειγμα – for loop (2) #pragma omp parallel for for(i=1;i

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

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

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

25 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

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

27 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); } Παράδειγμα – χρονομέτρηση

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

29 29/11/2004Εισαγωγή στο OpenMP29 #pragma omp parallel for shared(x, y, index, n) for(i=0;i

30 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)

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

32 29/11/2004Εισαγωγή στο OpenMP32 #pragma omp parallel { #pragma omp for for(i=0;i

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

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

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

36 29/11/2004Εισαγωγή στο OpenMP36 for(i=1;i

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

38 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 Μεταβλητές συστήματος

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

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

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

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

43 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 για υβριδικό μοντέλο

44 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

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


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

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google