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

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

Κατανεμημένος και Παράλληλος Προγραμματισμός MPI. Γρήγορος οδηγός αναφοράς 1/4/2017

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

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

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

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

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

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

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

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

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

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

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

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

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

Κατανεμημένος και Παράλληλος Προγραμματισμός MPI. MPI Απλές εντολές 03/13/2016. Οδηγίες αποστολής / παραλαβής μηνυμάτων, Υπολογισμός του π (

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

Γλώσσα Προγραμματισμού C

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

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

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

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

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

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

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

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

Γλώσσα Προγραμματισμού C

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

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

A[0] = 0; /* To μηδέν δεν έχει διαιρέτες */ for (i=1; i<n; i++) { S=0; for (d=1; d<=i; d++) if (i % d == 0) S += d; A[i] = S; }

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

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων

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

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

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

Προγραμματισμός HY: Γλώσσα Προγραμματισμού C

Διάλεξη 5η: Εντολές Επανάληψης

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

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

Δομές ελέγχου & επανάληψης

Υπολογισμός - Εντολές Επανάληψης

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

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

Διάλεξη 04: Παραδείγματα Ανάλυσης

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Μεθόδων Επίλυσης Προβλημάτων

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

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

Πληροφορική 2. Αλγόριθμοι

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

Γλώσσα Προγραμματισμού C

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Κεφάλαιο 5ο: Εντολές Επανάληψης

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

ΗΥ-150. Προγραμματισμός

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

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

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

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

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

Διαδικασιακός Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

i : 0<=i<N-1 => data[i] <= data[i+1] 25/10/2009

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

Εργαστηριακή Άσκηση 1

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

Εντολές ελέγχου ροής if, for, while, do-while

Ενότητα 1 Διάλεξη 3. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Μεθόδων Επίλυσης Προβλημάτων

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Θέματα Προγραμματισμού Η/Υ

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Γλώσσα Προγραμματισμού C

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές!

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Ημερομηνία: Πέμπτη 12 Απριλίου 2018 Διάρκεια Εξέτασης: 3 ώρες ΕΚΦΩΝΗΣΕΙΣ

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

Transcript:

Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Παράλληλος προγραμματισμός OpenMP (2) Παραλληλοποίηση των βρόγχων (for loops) Παραδείγματα Χρονομέτρηση Καλές πρακτικές Ταξινόμηση άρτιου περιττού Μέτρηση λέξεων σε αρχείο κειμένου ΕνόητηταI #8 - OpenMP τεχνικές 2 Ο βρόγχος for H OMP διαχειρίζεται χωρίς την επέμβαση του προγραμματιστή τους βρόγχους του for (δεν μπορούν να παραλληλισθούν βρόγχοι while ή do..while): # pragma omp parallel { --- # pragma omp for ή # pragma omp parallell for { --- ΕνόητηταI #8 - OpenMP τεχνικές 3 1

Παραδείγματα (1 από 6) # pragma omp parallel { # pragma omp for printf("\ndiergasia %d - - ektelei to %d tou for loop...", omp_get_thread_num(), i); N = 10 Diergasia 3 -- ektelei to 8 tou for loop... Diergasia 3 -- ektelei to 9 tou for loop... Diergasia 2 -- ektelei to 6 tou for loop... Diergasia 2 -- ektelei to 7 tou for loop... Diergasia 1 -- ektelei to 3 tou for loop... Diergasia 1 -- ektelei to 4 tou for loop... Diergasia 1 -- ektelei to 5 tou for loop... Diergasia 0 -- ektelei to 0 tou for loop... Diergasia 0 -- ektelei to 1 tou for loop... Diergasia 0 -- ektelei to 2 tou for loop... ΕνόητηταI #8 - OpenMP τεχνικές 4 Παραδείγματα (2 από 6) # pragma omp parallel shared(n) private(i) { # pragma omp for printf("\ndiergasia %d - - ektelei to %d tou for loop...", omp_get_thread_num(), i); N = 10 Diergasia 3 -- ektelei to 8 tou for loop... Diergasia 3 -- ektelei to 9 tou for loop... Diergasia 2 -- ektelei to 6 tou for loop... Diergasia 2 -- ektelei to 7 tou for loop... Diergasia 1 -- ektelei to 3 tou for loop... Diergasia 1 -- ektelei to 4 tou for loop... Diergasia 1 -- ektelei to 5 tou for loop... Diergasia 0 -- ektelei to 0 tou for loop... Diergasia 0 -- ektelei to 1 tou for loop... Diergasia 0 -- ektelei to 2 tou for loop... ΕνόητηταI #8 - OpenMP τεχνικές 5 Παραδείγματα (3 από 6) reduction(+:sum) sum += A[i]; N = 10 Athroisma = 47 ΕνόητηταI #8 - OpenMP τεχνικές 6 2

Παραδείγματα (4 από 6) private (i) shared(n) reduction(+:sum) { sum += A[i]; printf("\ndiergasia %d, i=%d, sum=%d", omp_get_thread_num(), i, sum); ΕνόητηταI #8 - OpenMP τεχνικές 7 Παραδείγματα (5 από 6) private (i) shared(n) reduction(+:sum) nowait sum += A[i]; Ότι και στο προηγούμενο παράδειγμα με την διαφορά ότι εάν κάποια διεργασία (πυρήνας) τερματίσει νωρίτερα από τους υπόλοιπους μπορεί να του ανατεθεί επόμενη εργασία. Προσοχή: πρέπει να χρησιμοποιείται μόνο αν είμαστε σίγουροι ότι δεν υπάρχει εξάρτηση διεργασιών. ΕνόητηταI #8 - OpenMP τεχνικές 8 Παραδείγματα (6 από 6) private (i) shared(n) reduction(+:sum) { sum += A[i]; printf("\ndiergasia %d, i=%d, sum=%d", omp_get_thread_num(), i, sum); printf("\n\nathroisma = %d\n\n", sum); N = 10: 0=3, 1=6, 2=7, 3=5, 4=3, 5=5, 6=6, 7=2, 8=9, 9=1 Diergasia 2, i=6, sum=6 Diergasia 2, i=7, sum=8 Diergasia 3, i=8, sum=9 Diergasia 3, i=9, sum=10 Diergasia 1, i=3, sum=5 Diergasia 1, i=4, sum=8 Diergasia 1, i=5, sum=13 Diergasia 0, i=0, sum=3 Diergasia 0, i=1, sum=9 Diergasia 0, i=2, sum=16 Athroisma = 47 ΕνόητηταI #8 - OpenMP τεχνικές 9 3

Βρόγχοι: static vs. dynamic (1 από 4) Schedule static: o βρόγχος διαιρείται σε συνεχή τμήματα ανάλογα με τους πυρήνες/διεργασίες. Schedule dynamic: βρόγχος διαιρείται σε τμήματα μεγέθους 1 και εάν κάποια διεργασία/πυρήνας τελειώνει τότε του ανατίθεται νέο τμήμα (πάντα μεγέθους 1 εκτός και εάν ορισθούν διαφορετικά πχ schedule(dynamic, 2) ) ΕνόητηταI #8 - OpenMP τεχνικές 10 Βρόγχοι: static vs. dynamic (2 από 4) #pragma omp parallel for schedule(static) for(i=0; i<10; i++) printf("\n Diergasia = %d, i = %d", omp_get_thread_nu m(),i); Κάθε διεργασία παίρνει από την αρχή ένα μέρος του βρόγχου (σταθερό) Diergasia = 0, i = 0 Diergasia = 0, i = 1 Diergasia = 0, i = 2 Diergasia = 3, i = 8 Diergasia = 3, i = 9 Diergasia = 1, i = 3 Diergasia = 1, i = 4 Diergasia = 1, i = 5 Diergasia = 2, i = 6 Diergasia = 2, i = 7 ΕνόητηταI #8 - OpenMP τεχνικές 11 Βρόγχοι: static vs. dynamic (3 από 4) #pragma omp for schedule(dynamic) for(i=0; i<10; i++) printf("\n Diergasia = %d, i = %d", omp_get_thread_n um(),i); Κάθε διεργασία παίρνει ένα μέρος του βρόγχου και μόλις τελειώσει παίρνει επόμενο, κλπ Diergasia = 0, i = 2 Diergasia = 0, i = 4 Diergasia = 3, i = 3 Diergasia = 3, i = 6 Diergasia = 3, i = 7 Diergasia = 3, i = 8 Diergasia = 3, i = 9 Diergasia = 2, i = 1 Diergasia = 1, i = 0 Diergasia = 0, i = 5 ΕνόητηταI #8 - OpenMP τεχνικές 12 4

Βρόγχοι: static vs. dynamic (4 από 4) #pragma omp for schedule(dynamic, 3) for(i=0; i<10; i++) printf("\n Diergasia = %d, i = %d", omp_get_thread_ num(),i); Ότι και η προηγούμενη μόνο που η κάθε διεργασία παίρνει αρχικά από 3 μέρη του βρόγχου Diergasia = 0, i = 0 Diergasia = 0, i = 1 Diergasia = 0, i = 2 Diergasia = 1, i = 3 Diergasia = 1, i = 4 Diergasia = 1, i = 5 Diergasia = 2, i = 9 Diergasia = 3, i = 6 Diergasia = 3, i = 7 Diergasia = 3, i = 8 ΕνόητηταI #8 - OpenMP τεχνικές 13 Reduction Βασικοί τελεστές + με αρχική τιμή στην μεταβλητή 0 * με αρχική τιμή στην μεταβλητή 1 - με αρχική τιμή στην μεταβλητή 0 Παράδειγμα: reduction(*: x) X *= A[i] ΕνόητηταI #8 - OpenMP τεχνικές 14 Χρονομέτρηση $/bin/time./εκτελέσιμο πρόγραμμα Real : x User: y Sys : z X: ο συνολικός χρόνος εκτέλεσης του προγράμματος από την αρχή μέχρι το τέλος Y: ο απαιτούμενος χρόνος του προγράμματος χωρίς τον χρόνο που απαιτήθηκε για υπηρεσίες του λειτουργικού συστήματος Z: αποκλειστικά ο χρόνος που χρειάστηκε για υπηρεσίες του Λ.Σ. (πχ input/output κλπ) ΕνόητηταI #8 - OpenMP τεχνικές 15 5

Γρήγορη ερώτηση: τι θα εκτυπωθεί for (i=0; i<10; i++) printf( %d, I printf( \n\n ); private(i) for (i=0; i<10; i++) printf( %d, I printf( \n\n ); Δεν υπάρχει καμία διαφορά γιατί έτσι και αλλιώς η OMP μοιράζει την for σε διεργασίες με τον αντίστοιχο δείκτη ΕνόητηταI #8 - OpenMP τεχνικές 16 Πρακτικές βελτιστοποίησης Βελτιστοποίηση (ελαχιστοποίηση) των barriers Αποφυγή σειριακών τμημάτων Αποφυγή μεγάλων critical τμημάτων του προγράμματος Μεγιστοποίηση πλήθους παράλληλων τμημάτων Αποφυγή παράλληλων τμημάτων σε εσωτερικούς βρόγχους Αντίληψη μικρής εξισορρόπησης φορτίου εργασίας ΕνόητηταI #8 - OpenMP τεχνικές 17 Βελτιστοποίηση των barriers (1 από 3) # pragma omp parallel {. # pragma omp for ------- # pragma omp for nowait ------- Ένα barrier λιγότερο. Η οδηγία nowait έχει σαν αποτέλεσμα να άρει το barrier μετά τον δεύτερο βρόγχο. Έτσι όποιος πυρήνας τελειώσει νωρίτερα να μπορεί να αναλάβει επόμενη εργασία. ΕνόητηταI #8 - OpenMP τεχνικές 18 6

Βελτιστοποίηση των barriers (2 από 3) # pragma omp parallel default(none) shared(n, A, B, C, D, sum) private(i) { --- # pragma omp for nowait A[i] = 10 + B[i]; # pragma omp for nowait C[i] = 10 * D[i]; # pragma omp barrier # pragma omp for nowait reduction(+:sum) sum += A[i] + C[i]; --- ΕνόητηταI #8 - OpenMP τεχνικές 19 Βελτιστοποίηση των barriers (3 από 3) Οι δύο πρώτοι βρόγχοι θα εκτελεστούν χωρίς να περιμένει ο ένας το άλλο Για να εκτελεστεί όμως ο τρίτος βρόγχος, οι δύο πρώτοι πρέπει οπωσδήποτε να έχουν ολοκληρωθεί αφού υπάρχει σαφής εξάρτηση (dependency) των δεδομένων. ΠΡΟΣΟΧΗ: πρέπει να είμαστε βέβαιοι ότι δεν υπάρχει εξάρτηση δεδομένων όταν εφαρμόζουμε τακτικές άρσης των barriers ΕνόητηταI #8 - OpenMP τεχνικές 20 Αποφυγή παράλληλων τμημάτων σε εσωτερικούς βρόγχους (1 από 2) for (j=0; j<n; j++) for (k=0; k<n; k++) {.. Το κόστος της αίτησης παραλληλίας ανέρχεται σε N 2. ΕνόητηταI #8 - OpenMP τεχνικές 21 7

Αποφυγή παράλληλων τμημάτων σε εσωτερικούς βρόγχους (2 από 2) # pragma omp parallel for (j=0; j<n; j++) # pragma omp for for (k=0; k<n; k++) {.. To κόστος της παραλληλίας μειώνεται σημαντικά! ΕνόητηταI #8 - OpenMP τεχνικές 22 Αποφυγή σειριακών τμημάτων Είναι προφανές ότι όσο πιο μικρά και λίγα είναι τα σειριακά τμήματα (δηλαδή αυτά που δεν μπορούν να εκτελεσθούν παράλληλα) ενός προγράμματος τόσο μειώνει και ο χρόνος εκτέλεσης του παράλληλου προγράμματος (Νόμος Amdahl) Αντίστοιχα η μεγιστοποίηση του πλήθος των παράλληλων τμημάτων ελαχιστοποιεί πάλι τον χρόνο εκτέλεσης του προγράμματος ΕνόητηταI #8 - OpenMP τεχνικές 23 Αποφυγή μεγάλων critical τμημάτων του προγράμματος Critical: εάν απαιτείται κάποιο μέρος του παράλληλου τμήματος να εκτελεσθεί αποκλειστικά από μία διεργασία/πυρήνα: #pragma omp parallel shared(x) { ---- #pragma omp critical x = x + 1; Αν και όλες οι διεργασίες θα προσπαθήσουν (ανταγωνισμός) να εκτελέσουν την αύξηση του x αποκλειστικά μόνο μία θα το εκτελέσει ακριβώς επειδή είναι critical ΕνόητηταI #8 - OpenMP τεχνικές 24 8

Αντίληψη μικρής εξισορρόπησης φορτίου εργασίας Πολλές (αν όχι όλες) φορές κάποιες διεργασίες / πυρήνες αναλαμβάνουν μεγαλύτερο φόρτο εργασίας από άλλες Παράδειγμα: εργασίες σε τριγωνικούς πίνακες θα επιφέρει μεγαλύτερο φόρτο στις διεργασίες που θα διαχειριστούν γραμμές με τα περισσότερα σε πλήθος στοιχεία ΕνόητηταI #8 - OpenMP τεχνικές 25 Εξισορρόπηση φόρτου (1 από 2) Read_from_file_chunk(i) For (j=0; j<p; j++) Εργασίες σε δεδομένα Write_results_to_file_chunk(i) O παραπάνω κώδικας διαβάζει ένα αρχείο τμηματικά (chunks), η κάθε διεργασία/πυρήνας επεξεργάζεται αυτό το τμήμα και στην συνέχεια γράφονται τα αποτελέσματα σε αυτό το τμήμα του αρχείου. Πως βελτιστοποιείται??? ΕνόητηταI #8 - OpenMP τεχνικές 26 Εξισορρόπηση φόρτου (2 από 2) # pragma omp parallel Παραλληλοποίηση { # pragma omp single των I/O { Read_from_file_chunk(0) διαδικασιών με for (i=1; i<n; i++) τους υπολογισμούς # pragma omp single nowait { Read_from_file_chunk(i) schedule(dynamic) Εργασίες σε δεδομένα # pragma omp single nowait Write_results_to_file_chunk(i) ΕνόητηταI #8 - OpenMP τεχνικές 27 9

Ταξινόμηση άρτιου/περιττού (1 από 2) Μοιάζει με την μέθοδο φυσαλίδας (bubble sort) Διαχωρίζει τις συγκρίσεις σε δύο φάσεις Άρτια φάση: (Α[0],Α[1]), (Α[2],Α[3]), (Α[4],Α[5]), Περιττή φάση: (Α[1],Α[2]), (Α[3],Α[4]), (Α[5],Α[6]), ΕνόητηταI #8 - OpenMP τεχνικές 28 Ταξινόμηση άρτιου/περιττού (2 από 2) for (fasi=0; fasi<n; fasi++) if (fasi % 2 == 0 ) // άρτια φάση for (i=1; i<n; i+=2) if (A[i-1] > A[i]) { temp = A[i]; A[i] = A[i-1]; A[i-1] = temp; else // περιττή φάση for (i=1; i<n-1; i+=2) if (A[i] > A[i+1]) { temp = A[i]; A[i] = A[i+1]; A[i+1] = temp; ΕνόητηταI #8 - OpenMP τεχνικές 29 Ταξιν. άρτιου/περιττού, παράλληλη έκδοση 1 for (fasi=0; fasi<n; fasi++) if (fasi % 2 == 0 ) //άρτια default(none) shared(a, N) private(temp, i) num_threads(2) for (i=1; i<n; i+=2) if (A[i-1] > A[i]) { temp = A[i]; A[i] = A[i-1]; A[i-1] = temp; Else // περιττή φάση default(none) shared(a, N) private(temp, i) num_threads(2) for (i=1; i<n-1; i+=2) if (A[i] > A[i+1]) { temp = A[i]; A[i] = A[i+1]; A[i+1] = temp; ΕνόητηταI #8 - OpenMP τεχνικές 30 10

Ταξιν. άρτιου/περιττού, παράλληλη έκδοση 2 # pragma omp parallel num_threads(3) default(none) shared(a, N) private(temp, i) for (fasi=0; fasi<n; fasi++) { if (fasi % 2 == 0 ) // άρτια # pragma omp for for (i=1; i<n; i+=2) { if (A[i-1] > A[i]) { temp = A[i]; A[i] = A[i-1]; A[i-1] = temp; else //περιττή # pragma omp for for (i=1; i<n-1; i+=2) { if (A[i] > A[i+1]) { temp = A[i]; A[i] = A[i+1]; A[i+1] = temp; ΕνόητηταI #8 - OpenMP τεχνικές 31 Σύγκριση των δύο εκδόσεων Διεργασίες/πυρήνες 1 2 3 4 Δύο οδηγίες parallel for 0,770 0,453 0,358 0,305 Δύο οδηγίες for 0,732 0,376 0,294 0,239 0,9 0,8 0,7 0,6 2 parallel for 2 οδηγίες for 0,5 0,4 0,3 0,2 0,1 0 1 2 3 4 ΕνόητηταI #8 - OpenMP τεχνικές 32 Μέτρηση λέξεων (από αρχείο) while (! feof(f) ) { c = fgetc(f); if ( (c>='a' && c<='z') (c>='a' && c<='z') (c>='0' && c<='9')) { if (mesa_se_leksi == 0) { lekseis++; mesa_se_leksi = 1; else mesa_se_leksi = 0; Η μεταβλητή mesa_se_leksi λειτουργεί σαν flag. Όταν διαβασθεί ένας χαρακτήρας, εάν είναι γράμμα ή αριθμός τότε εάν δεν βρισκόμαστε μέσα σε λέξη αυξάνει τον μετρητή των λέξεων (lekseis) αλλιώς δεν πρέπει να μετρηθεί λέξη ΕνόητηταI #8 - OpenMP τεχνικές 33 11

Παράλληλη έκδοση (μέτρηση λέξεων) Τεμαχισμός του αρχείου σε τμήματα (chunks) Απόδοση του κάθε τμήματος σε διαφορετική διεργασία / πυρήνα Ο κάθε πυρήνας διαβάζει το τμήμα που του αντιστοιχεί Μέτρηση του πλήθους των λέξεων (τοπικά) Άθροιση όλων των επιμέρους μετρητών (reduce) ΕνόητηταI #8 - OpenMP τεχνικές 34 Ερωτήσεις; Τέλος της # 07 ενότητας Χρησιμοποιείστε το email για όποιες επιπλέον απορίες / ερωτήσεις: savvas@teilar.gr Σημειώσεις μαθήματος (και όχι μόνο): https://e-class.teilar.gr/courses/cs386/ ΕνόητηταI #8 - OpenMP τεχνικές 35 12