EM 361: Παξάιιεινη Υπνινγηζκνί

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

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

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

Constructors and Destructors in C++

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

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

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

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

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

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

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

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

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

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

Μορθές Κακόβοσλοσ Κώδικα (Malicious Code)

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

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

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

Intel Accelerate Your Code

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

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

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

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

Η αξρή ζύλδεζεο Client-Server

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ. 3. Έλαο θαηαρσξεηήο SISO ησλ 4 bits έρεη: α) Μία είζνδν, β) Δύν εηζόδνπο, γ) Σέζζεξεηο εηζόδνπο.

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Fortran και Αντικειμενοστραυής προγραμματισμός. 3ε ελόηεηα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

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

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

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

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

Ενδεικτικά Θέματα Στατιστικής ΙΙ

Εηζαγσγή ζηελ επηζηήκε ησλ ππνινγηζηώλ. Λνγηζκηθό Υπνινγηζηώλ Κεθάιαην 7ν Λεηηνπξγηθά Σπζηήκαηα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H )

Γηαηάμεηο Αλίρλεπζεο Γηαξξνώλ (λεξνύ θαπζίκωλ ρεκηθώλ )

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

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

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

ΦΥΣΙΚΗ ΤΩΝ ΡΕΥΣΤΩΝ. G. Mitsou

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

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

Αντισταθμιστική ανάλυση

Αιγόξηζκνη Δθρώξεζε, Δίζνδνο θαη Έμνδνο ηηκώλ Γνκή αθνινπζίαο. Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ

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

ΒΗΜΑ 2. Εηζάγεηε ηνλ Κωδηθό Πξόζβαζεο πνπ ιακβάλεηε κε SMS & δειώλεηε επηζπκεηό Όλνκα Πξόζβαζεο (Username) θαη ην ζαο

3 ΑΠΙΔ ΑΘΖΔΗ ΘΟΚΟΙΟΓΗΑ ΠΟΤ ΑΛΣΗΚΔΣΩΠΗΕΟΛΣΑΗ ΚΔ ΦΤΗΘΖ ΘΑΗ ΚΑΘΖΚΑΣΗΘΑ ΙΤΘΔΗΟΤ

ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε. Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο

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

EL Eνωμένη στην πολυμορυία EL A8-0046/319. Τροπολογία

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

x x x x tan(2 x) x 2 2x x 1

ΠΔΡΗΓΡΑΦΖ ΛΔΗΣΟΤΡΓΗΚΟΣΖΣΑ ΥΔΓΗΟΤ ΑΡΗΘΜ. 1

Άσκηση 1 - Μοπυοποίηση Κειμένου

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD

Η επιζκόπηζη ηης έμμιζθης ενηολής ζηην Αλλοδαπή. Καηεξίλα Γαιαλνπνύινπ, Intellectual Property Manager, Microsoft Ειιάο Α.Ε.

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

Δομή επανάλητηρ Ενηολή Όζο

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

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

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΕΞΙΣΩΣΕΙΣ. (iv) (ii) (ii) (ii) 5. Γηα ηηο δηάθνξεο ηηκέο ηνπ ι λα ιπζνύλ νη εμηζώζεηο : x 6 3 9x

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

ΗΛΕΚΤΡΟΝΙΚΗ ΜΝΗΜΗ ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

Αναμόπθωζη Ππογπάμμαηορ Πποπηςσιακών Σποςδών

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Κβαντικοί Υπολογισμοί. Πέκπηε Γηάιεμε

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

Αιγόξηζκνη Δνκή επηινγήο. Απιή Επηινγή ύλζεηε Επηινγή. Εηζαγσγή ζηηο Αξρέο ηεο Επηζηήκεο ησλ Η/Τ. introcsprinciples.wordpress.

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

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

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

Σειεζηέο, Δθθξάζεηο Πξνηάζεηο, Δληνιέο Διέγρνπ Ρνήο

γηα ηνλ Άξε Κσλζηαληηλίδε

Transcript:

EM 361: Παξάιιεινη Υπνινγηζκνί Φαξκαλδάξεο Βαγγέιεο, Τκήκα Δθαξκνζκέλωλ Μαζεκαηηθώλ Παλεπηζηήκην Κξήηεο, Φεηκεξηλό Δμάκελν 2010/11 Κεθάιαην 5: (A) Λνγηζκηθό, Βαζηθέο Δθαξκνγέο OpenMP Παξάιιειεο Γιώζζεο Γεδνκέλωλ (Fortran 90, C, C++). Βηβιηνζήθεο Αληαιιαγήο Μελπκάηωλ (Message Passing Interface, MPI), OpenMP, POSIX Threads. Παξάιιεινη Αιγόξηζκνη κε Φξήζε OpenMP.

Λνγηζκηθό Λνγηζκηθό γηα αλάπηπμε παξάιιεισλ πξνγξακκάησλ: Γηαζέζηκα παθέηα: γεληθήο ρξήζεσο ή εμεηδηθεπκέλνη αιγόξηζκνη. -- Υπέξ: Δύθνιε ιύζε. -- Καηά: Με-θαηαλόεζε ηνπ αιγόξηζκνπ θαη ηνπ πξνγξάκκαηνο. Αλάπηπμε θώδηθα από ηελ αξρή -- Υπέξ: Δπειημία, Πξνζαξκνζηηθόηεηα, Καηαλόεζε. -- Καηά: Μπνξεί λα είλαη πνιύ ρξνλνβόξα ιύζε. Γπλαηόηεηα ρξήζεο πξνγξακκάησλ από παξάιιειεο βηβιηνζήθεο: π.ρ. ρξήζε ησλ βηβιηνζεθώλ BLAS, ScaLAPack θ.α. -- Υπέξ: Οη βηβιηνζήθεο πεξηέρνπλ πνιύ γξήγνξνπο θαη δνθηκαζκέλνπο αιγόξηζκνπο. -- Καηά: Γύζθνιε θαηαλόεζε ηνπ αιγόξηζκνπ θαη ηνπ πξνγξάκκαηνο. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 2

Λνγηζκηθό Παξάιιεινπ Πξνγξακκαηηζκνύ Γηεπηθάλεηα Πξνγξακκαηηζκνύ θαη Δθαξκνγώλ (Application Programming Interface) Παξάιιειεο Γιώζζεο Γεδνκέλσλ (Parallel Data Languages): Πξάμεηο κεηαμύ δηαλπζκάησλ, πηλάθσλ (π.ρ. Fortran 90, high Performance Fortran) Μνληέιν Γεζκώλ (Threads model): Πνιιαπιέο δηεξγαζίεο πνπ επηθνηλσλνύλ κέζσ ηνπ θπξίσο πξνγξάκκαηνο. Μνληέιν Μεηαθνξάο Μελύκαηνο (Message Passing model): νη δηεξγαζίεο επηθνηλσλνύλ κε αληαιιαγέο κελπκάησλ. Απηόκαηνο Παξαιιειηζκόο Απηόκαηε κεηαηξνπή ηνπ θώδηθα. Σπλήζσο κεηαηξνπή απιώλ επαλαιεπηηθώλ δηαδηθαζηώλ (loops). Δύθνινη ζηε ρξήζε αιιά κε πεξηνξηζκέλεο δπλαηόηεηεο. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 3

Παξάιιειεο Γιώζζεο Γεδνκέλωλ Σπλήζσο εκπεξηέρνπλ ζύλνιν εληνιώλ πξνέθηαζεο ηεο θαλνληθήο (ζεηξηαθή) γιώζζαο. Fortran 90 θαη 95 (F90, F95): Πξάμεηο κεηαμύ δηαλπζκάησλ, πηλάθσλ Fortran Real x(100), y(100).. Do i = 1, 100 y(i) = y(i)*x(i) End do F90 Real :: x(100), y(100). y = y*x*z High Performance Fortran (HPF): Πεξηέρεη εηδηθέο εληνιέο (compiler directives) πνπ ιέλε ζηνλ compiler πώο λα θαηαλέκεη δεδνκέλα κεηαμύ ησλ επεμεξγαζηώλ. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 4

Παξάιιειεο Γιώζζεο Γεδνκέλωλ Πνιιέο παξαιιαγέο/επεθηάζεηο ηεο C. Οη πεξηζζόηεξεο από απηέο έρνπλ αλαπηπρζεί γηα ζπγθεθξηκέλεο αξρηηεθηνληθέο ππνινγηζηηθώλ ζπζηεκάησλ. C*: developed in ~ 1990 by Thinking Machines Corporation, for the connection machine (SIMD algorithms). Sequent C: parallel programming under DYNIX (a version of UNIX). ncube C + : επέθηαζε ηεο C θαηά ηελ νπνία έλα πξόγξακκα ηξέρεη νιόθιεξν ζε θάζε επεμεξγαζηή. Μνληέιν SPMD (Single Pogram Multiple Data). OCCAM: developd in ~ 1978 by Immos Limited for the Transputer series of processor. C-LINDA: consists of several operations that work on tople space, a speical form of shared memory. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 5

Μνληέιν Γεζκώλ (Threads model) Σην κνληέιν δεζκώλ παξάιιεινπ πξνγξακκαηηζκνύ κηα δηεξγαζία κπνξεί λα έρεη πνιιαπινύο, ηαπηόρξνλνπο δξόκνπο εθηέιεζεο (execution paths). Παξάδεηγκα: θύξην πξόγξακκα main.exe πνπ πεξηιακβάλεη ζεηξά από ππνξνπηίλεο. Μεηά από εθηέιεζε ελόο ζεηξηαθνύ κέξνπο ην main.exe δεκηνπξγεί κηα ζεηξά από εξγαζίεο (δέζκεο) νη νπνίεο κπνξνύλ λα εθηειεζηνύλ ηαπηόρξνλα. Κάζε εξγαζία έρεη ηνπηθά δεδνκέλα (local data) θαη κνηξάδεηαη ηα δεδνκέλα ηνπ main.exe. Καηόπηλ αλαηίζεηαη ζε δηαθνξεηηθό επεμεξγαζηή. Οη δέζκεο επηθνηλσλνύλ κεηαμύ ηνπο κέζα από ηελ γεληθή (global) θνηλή κλήκε. Τν main.exe είλαη ππεύζπλν γηα ηελ δεκηνπξγία ησλ δεζκώλ θαη ηελ παξνρή ησλ θνηλώλ δεδνκέλσλ πνπ ρξεηάδεηαη θάζε δέζκε. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 6

Μνληέιν Γεζκώλ (Threads model) Από πιεπξάο πξνγξακκαηηζκνύ ην κνληέιν δεζκώλ ζπλήζσο πεξηιακβάλεη Βηβιηνζήθε από ππνξνπηίλεο πνπ θαινύληαη από ην θπξίσο πξόγξακκα. Σεη από νδεγίεο γηα ηνλ compiler πνπ εκπεξηέρνληαη ζηνλ παξάιιειν θώδηθα (compiler directives). Καηάιιειν γηα ζπζηήκαηα κνηξαδόκελεο θνηλήο κλήκεο. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 7

Μνληέιν Γεζκώλ (Threads model) Γηαθνξεηηθέο εθαξκνγέο ηνπ κνληέινπ δεζκώλ: POSIX Γέζκεο: Βαζίδεηαη ζε ζπλαξηήζεηο βηβιηνζήθεο. Γηαζέζηκν κόλν γηα ηελ C. Σπρλά αλαθέξεηαη θαη σο Pthreads. Πξνζθέξεη πνιύ εμεηδηθεπκέλν παξαιιειηζκό. Αξθεηά πνιύπινθν ζηελ ρξήζε. OpenMP: Βαζίδεηαη ζε compiler directives. Γηαζέζηκν ηόζν γηα C/C++ θαη Fortran. Μπνξεί λα είλαη πνιύ εύθνιν ζηελ ρξήζε, εηδηθά γηα παξαιιειηζκό επαλαιεπηηθώλ δηαδηθαζηώλ (loops). Πξνζνρή: ην κνληέιν δεζκώλ είλαη αξθεηά ηζρπξό γηα shared memory machines αιιά όρη γηα άιιεο αξρηηεθηνληθέο. Γύζθνιε ε κεηαθνξά ηνπ παξάιιεινπ θώδηθα ζε δηαθνξεηηθά ζπζηήκαηα. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 8

Μνληέιν Μεηαθνξάο Μελύκαηνο (Message Passing) Τν κνληέιν κεηαθνξάο κελύκαηνο έρεη ηα αθόινπζα ραξαθηεξηζηηθά: Υπάξρεη ζύλνιν από δηεξγαζίεο νη νπνίεο ρξεζηκνπνηνύλ ηελ δηθηά ηνπο κλήκε θαηά ηε δηάξθεηα ησλ ππνινγηζκώλ. Οη δηεξγαζίεο αληαιιάζνπλ δεδνκέλα ζηέιλνληαο θαη ιακβάλνληαο κελύκαηα. Οη δηαδηθαζία αληαιιαγήο ζπλήζσο ρξεηάδεηαη ζπλεξγαζία κεηαμύ ησλ δηεξγαζηώλ. Παξάδεηγκα ε απνζηνιή κελύκαηνο πξέπεη ζπλδπάδεηαη κε ηελ ιήςε ηνπ από άιιε δηεξγαζία. Η επηθνηλσλία γίλεηαη κέζα από βηβιηνζήθεο αληαιιαγήο κελπκάησλ (π.ρ. MPI, PVM) ηύπνπ SEND θαη RECEIVE. Η βηβιηνζήθε MPI (Message Passing Interface) είλαη ην δηεζλέο ζηάληαξη. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 9

Μνληέιν Μεηαθνξάο Μελύκαηνο (Message Passing) Από πιεπξάο πξνγξακκαηηζκνύ ν ρξήζηεο είλαη απνιύησο ππεύζπλνο γηα ηνλ πξνζδηνξηζκό ηεο παξάιιειεο δηαδηθαζίαο. Καηάιιειν ηόζν γηα ζπζηήκαηα θνηλήο αιιά θαη θαηαλεκεκέλεο κλήκεο. Οη θώδηθεο επεθηείλνληαη θαη κεηαθέξνληαη ζε ζπζηήκαηα δηαθνξεηηθήο αξρηηεθηνληθήο ζρεηηθά εύθνια. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 10

Απηόκαηνο Παξαιιειηζκόο Παξαιιειηζκόο ζεηξηαθνύ θώδηθα κέζσ απηόκαησλ παξάιιεισλ κεηαγισηηηζηώλ (parallel compilers). Δύθνινη ζηε ρξήζε: απαηηείηαη ιίγε έσο θαζόινπ δνπιεία από ηνλ ρξήζηε. Απηόκαηνο παξαιιειηζκόο επαλαιεπηηθώλ δηαδηθαζηώλ (loops): αλάζεζε θνκκαηηώλ ηεο επαλαιεπηηθήο δηαδηθαζίαο ζε δηαθνξεηηθνύο επεμεξγαζηέο. Μεηνλεθηήκαηα: Παξαιιειηζκόο δηεξγαζηώλ δελ είλαη εθηθηόο. Γελ είλαη επέιηθηνο. Μπνξεί λα παξάγεη ιάζνο απνηειέζκαηα. Γεληθά ηα απνηειέζκαηα είλαη πνιύ θησρά: ε πνιππινθόηεηα ησλ επαλαιεπηηθώλ δηαδηθαζηώλ δελ επηηξέπεη ηελ απηόκαηε παξαιειινπνίεζε ηνπο. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 11

Κεθάιαην 5: Open Multi-Processing (OpenMP) Βαζηθή ηδέα: Φξεζηκνπνηώληαο έλα ζύλνιν εηδηθώλ εληνιώλ παξαιιειίδνπκε κέξε ηνπ ππάξρνληα ζεηξηαθνύ θώδηθα. Θα δνύκε πην αλαιπηηθά: Τη είλαη ην OpenMP; Δηζαγωγηθά. Έλα απιό πξόγξακκα ζε OpenMP. Παξαιιειηζκόο επαλαιεπηηθώλ δηαδηθαζηώλ (loops) ρξεζηκνπνηώληαο OpenMP. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 12

Τη Δίλαη ην OpenMP; To OpenMP είλαη κηα Γηεπηθάλεηα Πξνγξακκαηηζκνύ θαη Δθαξκνγώλ (Application Programming Interface) παξαιιειηζκνύ γηα ζπζηήκαηα θνηλήο κλήκεο (shared memory systems). Απνηειείηαη από: Compiler Directives Runtime Library Routines Environmental Variables Φαξαθηεξηζηηθά ηνπ OpenMP: Standard γηα ηα πεξηζζόηεξα ζπζηήκαηα θνηλήο κλήκεο, Δύθνιν ζηε ρξήζε, Απνηειεζκαηηθόηεηα, Φνξεηόηηηα. Σρεδηαζκέλν ην γηα C/C++ όζν θαη Fortran/ Fortran 90. Ιζηνξία θαη Δμέιημε: ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 13

Τη Δίλαη ην OpenMP; To OpenMP βαζίδεηαη ζηελ ύπαξμε πνιιαπιώλ δεζκώλ (multi-threaded) ζε δηεξγαζίεο θνηλήο κλήκεο. Τν πξόγξακκα ρσξίδεηαη ζε παξάιιεια θαη ζεηξηαθά κέξε. Κάζε OpenMP πξόγξακκα μεθηλά κε κηα αξρηθή δηεξγαζία (master thread) ε νπνία εθηειείηαη ζεηξηαθά έσο όηνπ θηάζνπκε ζηελ πξώηε παξάιιειε πεξηνρή. Compiler Directive based: ν παξαιιειηζκόο επηηπγράλεηαη κε ηελ ρξήζε θαηάιιεισλ νδεγηώλ πνπ εκπεξηέρνληαη ζηνλ θώδηθα (C/C++ ή Fortran). ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 14

Program Hallo Παξάδεηγκα: Hello world πξόγξακκα Απιό πξόγξακκα ζε Fortran Integer :: NTHREADS, TID, OMP_GET_NUM_THREADS, OMP_GET_THREAD_NUM!Fork a team of threads with each thread having a private TID variable!$omp PARALLEL PRIVATE(TID)! Obtain and print thread id TID = OMP_GET_THREAD_NUM() PRINT *, 'Hello World from thread = ', TID! Only master thread does this IF (TID == 0) THEN NTHREADS = OMP_GET_NUM_THREADS() PRINT *, 'Number of threads = ', NTHREADS END IF! All threads join master thread and disband!$omp END PARALLEL Stop End ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 15

#include <omp.h> main () { int nthreads, tid; Παξάδεηγκα: Hello world πξόγξακκα Απιό πξόγξακκα ζε C /* Fork a team of threads with each thread having a private tid variable */ #pragma omp parallel private(tid) { /* Obtain and print thread id */ tid = omp_get_thread_num(); printf("hello World from thread = %d\n", tid); } /* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf("number of threads = %d\n", nthreads); } } /* All threads join master thread and terminate */ ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 16

Πεξηγξαθή Απινύ Πξνγξάκκαηνο Η δηάηαμε ησλ εληνιώλ/νδεγηώλ OpenMP (compiler directives) είλαη: Fortran:!$OMP directive.name [clause] Παξάδεηγκα:!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(BETA,PI) Τν end directive είλαη πξναηξεηηθό αιιά βνεζά ζηνλ έιεγρν ηνπ θώδηθα. Case Insensitive. Παξάδεηγκα:!$OMP directive [ structured block of code ]!$OMP end directive C/C++: #pragma omp directive.name [clause] Παξάδεηγκα: #pragma omp parallel default(shared) private(beta,pi) Case Sensitive. Γεληθά: Οη compilers εκπεξηέρνπλ κηα κεηαβιεηή ε νπνία θαηά ηε κεηάθξαζε ελεξγνπνηεί όιεο ηηο OpenMP εληνιέο (OpenMP directives). ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 17

Γεκηνπξγία Παξάιιειεο Πεξηνρήο Η παξάιιειε πεξηνρή (parallel region) είλαη έλα θνκκάηη ηνπ θώδηθα πνπ κπνξεί λα εθηειεζηεί από πνιιαπιέο δέζκεο (threads). Δίλαη ε ζεκαληηθόηεξε εληνιή ηνπ OpenMP. Μόιηο ην πξόγξακκα ζπλαληά κηα εληνιή parallel δεκηνπξγεί πνιιαπιέο threads νη νπνίεο εθηεινύλ ηνλ ίδην θώδηθα. Format: Fortran:!$OMP PARALLEL [clause...] IF (scalar_logical_expression) PRIVATE (list) SHARED (list) DEFAULT (PRIVATE FIRSTPRIVATE SHARED NONE) FIRSTPRIVATE (list) REDUCTION (operator: list) COPYIN (list) NUM_THREADS (scalar-integer-expression) block!$omp END PARALLEL ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 18

Παξάιιειε Πεξηνρή Format: C: #pragma omp parallel [clause...] newline if (scalar_expression) private (list) shared (list) default (shared none) firstprivate (list) reduction (operator: list) copyin (list) num_threads (integer-expression) structured_block Η κεηαβιεηή πεξηβάιινληνο (environmental variable) OMP_NUM_THREADS θαζνξίδεη πόζεο threads ζα ρξεζηκνπνηεζνύλ. Σπλήζσο ν αξηζκόο ησλ threads είλαη ν αξηζκόο ησλ επεμεξγαζηώλ νπ ζπζηήκαηνο. Οη threads αξηζκνύληαη από 0 σο P-1. omp_get_thread_num(): επηζηξέθεη ηνλ αξηζκό ηεο ζπγθεθξηκέλεο thread. omp_get_num_threads(): επηζηξέθεη ηνλ ζπλνιηθό αξηζκό ησλ threads. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 19

Παξαιιειηζκόο Δπαλαιεπηηθώλ Γηαδηθαζηώλ Παξαιιειηζκόο επαλαιεπηηθώλ δηαδηθαζηώλ (loops) κε ηελ εληνιή!omp do. Format: C: #pragma omp for [clause...] newline schedule (type [,chunk]) for_loop Fortran:!$omp do [clause...] SCHEDULE (type [,chunk]) do_loop!$omp end do schedule: πεξηγξάθεη πσο θαηαλέκνληαη νη επαλαιήςεηο ηνπ loop. Ο ηύπνο (type) κπνξεί λα είλαη ζηαηηθόο (static) ή δπλακηθόο (dynamic). Κάζε θνκκάηη έρεη κέγεζνο chunk. Αλ ην κέγεζνο δελ νξίδεηαη νη επαλαιήςεηο ηζνθαηαλέκνληαη (αλ απηό είλαη δπλαηόλ) ζε θάζε επεμεξγαζηή. ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 20

Παξάδεηγκα: Παξαιιειηζκόο Loop κε OpenMP #include <omp.h> #define CHUNKSIZE 100 #define N 1000 main () { int i, chunk; float a[n], b[n], c[n]; /* Some initializations */ for (i=0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE; #pragma omp parallel shared(a,b,c,chunk) private(i) { #pragma omp for schedule(dynamic,chunk) nowait for (i=0; i < N; i++) c[i] = a[i] + b[i]; } /* end of parallel section */ } ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 21

Πεξηζζόηεξεο Δληνιέο OpenMP OMP Section: Φξεζηκνπνηείηαη γηα παξαιιειηζκό κε επαλαιεπηηθήο δηαδηθαζίαο (όρη loop). Γειώλεη όηη ε αθόινπζε πεξηνρή ζα θαηαλεκεζεί ζε δηαθνξεηηθέο threads. Κάζε section εθηειείηαη από άιιε thread. Format: C: #pragma omp sections [clause...] newline { #pragma omp section newline block of code #pragma omp section newline block of code } Fortran:!$OMP SECTIONS [clause...]!$omp SECTION block of code!$omp SECTION block of code!$omp END SECTIONS ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 22

Πεξηζζόηεξεο Δληνιέο OpenMP OMP Master: Γειώλεη όηη ε αθόινπζε πεξηνρή ζα εθηειεζηεί κόλν από ηελ θεληξηθή thread (θεληξηθό επεμεξγαζηή). C: #pragma omp master Fortran:!$OMP MASTER OMP Single: Γειώλεη όηη ε αθόινπζε πεξηνρή ζα εθηειεζηεί κόλν από κία (νπνηαδήπνηε) thread. C: #pragma omp single Fortran:!$OMP SINGLE OMP PARALLEL DO/ parallel for: Σπλδπαζκόο 2 εληνιώλ OpenMP. Ιζνδύλακν κε ρξήζε 2 δηαδνρηθώλ εληνιώλ, δειαδή #pragma omp parallel for είλαη ηζνδύλακν κε έλα #pragma omp parallel πνπ αθνινπζείηαη από έλα #pragma omp for. Πνιιέο Αθόκε (Γείηε ην Manual ηνπ OpenMP). ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 23

Βηβιηνγξαθία Parallel Programming, B. Wilkinson, M. Allen, Prentice Hall, 2nd Ed. 2005. Introduction to Parallel Computing, A. Grama, G. Karypis, V. Kumar, A. Gupta, Addison- Wesley, 2003. Parallel Computing: Theory and Practice, M. J. Quinn, McGraw-Hill, 1994. POSIX Threads: http://www.yolinux.com/tutorials/linuxtutorialposixthreads.html OpenMP: http://openmp.org/wp/ ΔΜ 361: Παξάιιεινη Υπνινγηζκνί 2010/11, Κεθάιαην 5 24