Υπολογισμοί Μεταβίβασης Μηνυμάτων

Σχετικά έγγραφα
ύο μηχανισμοί απαιτούνται: 1. Μία μέθοδος για τη δημιουργία διεργασιών


Αρχιτεκτονική κοινής μνήμης

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

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

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

Message Passing Interface (MPI)

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

Message Passing Interface (MPI)

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

Συστήµατα Παράλληλης Επεξεργασίας. Message Passing Interface (MPI)

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

MPI: Message Passing Interface

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

MPI: Message Passing Interface

Message Passing Interface (MPI)

Message Passing Interface (MPI)

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο SUN RPC. Κλήση Αποµακρυσµένων ιαδικασιών (RPC) Σύνδεση: Port Mapper.

Κεφάλαιο VIΙΙ Β. Δημακόπουλος

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

Επικοινωνία. Message-Passing Interface (MPI) Βασικές Κλήσεις για Sockets. Μοντέλο Μεταβίβασης Μηνυµάτων. Μοντέλα Παράλληλου Υπολογισµού

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

Το Message Passing Interface (MPI) και η υποστήριξή του στο EGEE Grid. Vangelis Koukis 01-GRNET and HG EKT admin team

Το Message Passing Interface (MPI) και η υποστήριξή του στο EGEE Grid

Το Message Passing Interface (MPI) και η υποστήριξή του στο EGEE Grid

Παράλληλος προγραµµατισµός

MPI: Message Passing Interface

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΕΙΣΑΓΩΓΗ ΣΤO MESSAGE PASSING INTERFACE - MPI ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μεταβίβαση μηνυμάτων. Κεφάλαιο 5 (νέο βιβλίο) Κεφάλαιο 8 (παλιές σημειώσεις)

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Της φοιτήτριας Αριστέας Χρονοπούλου Αρ. Μητρώου: 01 / Επιβλέπων Καθηγητής Αθανάσιος Μάργαρης

MPI: Βαςικζσ Εντολζσ Επικοινωνίασ. Κώςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ 2011

Εμπειρική αποτίμηση παράλληλων προγραμμάτων

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

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

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

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

ΕΚΔΟΣΗ 1.1 ΜΑΙΟΣ, 2018 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΑΛΓΟΡΙΘΜΟΣ POLLING ΚΥΜΑΤΙΚΟΣ ΑΛΓΟΡΙΘΜΟΣ ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β.

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

Επιμερισμός δεδομένων

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

Non-blocking Επικοινωνίεσ και Buffering. Κώςτασ Διαμαντάρασ ΤΕΙ Θεςςαλονίκθσ 2011

Προγραµµατισµός µε ανταλλαγή µηνυµάτων Ι. Εισαγωγή στο MPI. Εφαρµογές Ανεξάρτητου Παραλληλισµού.

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

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

ΕΚΔΟΣΗ 1.1 ΑΠΡΙΛΙΟΣ, 2018 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΤΟ ΠΡΩΤΟΚΟΛΛΟ ECHO ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

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

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

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

30/4/2012 Συστήματα κατανεμημένης μνήμης και ο προγραμματισμός τους (Ι) Β. Δημακόπουλος

Παράλληλα και Κατανεµηµένα Συστήµατα. Εισαγωγή

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

Προγραμματισμός με Μεταβίβαση Μηνυμάτων

Παραλληλισμός δεδομένων ή Φυσικός παραλληλισμός

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

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

Σωληνωτή επεξεργασία

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

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

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

ΕΚΔΟΣΗ 1.1 ΜΑΙΟΣ, 2018 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΕΚΛΟΓΗ ΑΡΧΗΓΟΥ ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΤΟ ΠΡΩΤΟΚΟΛΛΟ TARRY ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

Σύγχρονοι υπολογισμοί

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Ανταλλαγι Μθνυμάτων. Κϊςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ

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

είκτες και Πίνακες (2)

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

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΡΟΛΟΓΙΑ ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

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

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

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

Διάλεξη 18η: Διαχείρηση Αρχείων

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

Probleme de transmitere în modul standard. MPI - Message Passing Interface. Comunicarea punct la punct

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

Διάλεξη 12: Διάχυση Μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

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

Περίληψη Φροντιστηρίου. Κατανεμημένα Συστήματα Ι. Το περιβάλλον DAP - Χαρακτηριστικά. Το περιβάλλον DAP Τι είναι.

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

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

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

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

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

Επεξεργασία Αρχείων Κειµένου

Transcript:

Υπολογισμοί Μεταβίβασης Μηνυμάτων Κ.Γ. Μαργαρίτης προσαρμογή από το μάθημα του Barry Wilkinson ITCS 4145/5145 2006 Cluster Computing Univ. of North Carolina at Charlotte 2.1

2.2 Προγραμματισμός μεταβίβασης μηνυμάτων με βιβλιοθήκες χρήστη Απαιτούνται δύο βασικοί μηχανισμοί: 1. Μηχανισμός δημιουργίας διεργασιών που εκτελούνται σε διαφορετικούς υπολογιστές 2. Μηχανισμός μεταβίβασης μηνυμάτων

Πολλαπλά προγραμμάτα, πολλαπλά δεδομένα Multiple program, multiple data (MPMD) Κώδικας Κώδικας Συμβολομετάφραση ανάλογα με τον επεξεργαστή Εκτελέσιμο Επεξεργαστής 0 Επεξεργαστήςp - 1 2.3

2.4 Aπλό πρόγραμμα, πολλαπλά δεδομένα Single Program Multiple Data (SPMD) Διαφορετικές διεργασίες σε ένα πρόγραμμα. Δηλώσεις ελέγχου επιλέγουν διαφορετικά τμήματα του προγράμματος για να εκτελεστούν σε κάθε επεξεργαστή. Όλα τα εκτελέσιμα ξεκινούν μαζί και οι διεργασίες είναι στατικές.. Τυπική μέθοδος του MPI Κώδικας Εκτελέσιμο Συμβολομετάφραση ανάλογα με τον επεξεργαστή Processor 0 Processor p - 1

2.5 Στατικές και δυναμικές διεργασίες Το βασικό εκτελέσιμο πρόγραμμα αποτελεί τη βασική στατική διεργασία, με χρόνο ζωής όσο και το πρόγραμμα. Η βασική διεργασία μπορεί να δημιουργεί άλλες δυναμικές διεργασίες στον ίδιο επεξεργαστή (ή και σε άλλο?). Διεργασία 1 - στατική spawn(); Εναρξη εκτέλεσης διεργασίας 2 Διεργασία 2 δυναμική Χρόνος

2.6 Βασικές σημειακές συναρτήσεις αποστολής και παραλαβής Μεταβίβαση ενός μηνύματος μεταξύ διεργασιών με συναρτήσεις βιβλιοθήκης send() and recv(): Διεργασία 1 Διεργασία 2 x y send(&x, 2); Κίνηση δεδομένων recv(&y, 1); Γενικευμένη σύνταξη (ακριβής μορφή αργότερα)

2.7 Σύγχρονη μεταβίμαση μηνυμάτων Οι συναρήσεις επιστρέφουν μόνο όταν η μεταφορά δεδομένων ολοκληρωθεί. Σύγχρονη αποστολή (synchronous send) Αναμένει μέχρι το πλήρες μήνυμα να μπορέι να παραληφθεί από την αντίστοιχη συνάρτηση και μετά ξεκινά την αποστολή. Σύγχρονη παραλαβή (synchronous receive) Αναμένει μέχρι την άφιξη του μηνύματος που περιμένει. Οι σύγχρονες συναρτήσεις εκτελούν δύο δράσεις: Μεταβίβαση δεδομένων και συγχρονισμό διεργασιών.

Πρωτόκολλο σύγχρονου send() και recv() Διεργασία 1 Διεργασία 2 Χρόνος Αναστολή Διεργασίας 1 Συνεχίζουν και οι δύο διεργασίες send(); Αίτημα αποστολής Αποδοχή (Ack) recv(); Μήνυμα (α) Όταν το send() συμβαίνει πριν το recv() Διεργασία 1 Διεργασία 2 Χρόνος Συνεχίζουν και οι δύο διεργασίες recv(); Aίτημα αποστολής send(); Μήνυμα Αποδοχή (Ack) (β) Όταν το recv() συμβαίνει πριν το send() Αναστολή Διεργασίας 2 2.8

2.9 Ασύγχρονη μεταβίβαση μηνυμάτων Οι συναρτήσεις επιστρέφουν χωρίς να περιμένουν την μεταφορά δεδομένων. Συνήθως απαιτείται τοπική αποθήκευση των μηνυμάτων. Αρκετές εκδόσεις ανάλογα με την ακριβή υλοποίηση της επιστροφής (ανασταλτική / blocking, μη-ανασταλτική / non-blocking). Γενικά δεν συγχρονίζουν αλλά επιτρέπουν τις διεργασίες να κινηθούν συντομότερα. Απαιτούν προσοχή στη χρήση.

2.10 Ανασταλτικός και Μη-ανασταλτικός Blocking και Non-Blocking Ανασταλτικός / Blocking επιστρέφει αφού οι τοπικές εργασίες αποθήκευσης έχουν ολοκληρωθεί, αν και η μεταφορά δεδομένων μπορεί να μην έχει τελειώσει. Μη-ανασταλτικός / Non-blocking επιστρέφει αμέσως. Υποθέτουν οτι η τοπική αποθήκευση δεδομένων δεν τροποποιείται από μετέπειτα συναρτήσεις, οι οποίες όμως μπορεί να συμβούν πριν τη μεταφορά δεδομένων. Υπεύθυνος ο προγραμματιστής. Οι όροι αυτοί μπορεί να έχουν διαφορετική σημασία σε άλλα συστήματα.

2.11 Επιστροφή της συνάρτησης πριν την ολοκλήρωση της μεταφοράς Απαιτείται απομονωτής μηνυμάτων μεταξύ του αποστολέα και του παραλήπτη. Διεργασία 1 Διεργασία 2 Χρόνος Συνέχιση διεργασίας send(); Απομονωτής recv(); Ανάγνωση απομονωτή

2.12 Ασύγχρονες (ανασταλτικές) συναρτήσεις που μετατρέπονται σε σύγχρονες Όταν ολοκληρωθούν οι τοπικές εργασίες, και το μήνυμα πάρει το δρόμο του, η αποστέλουσα διεργασία μπορεί να συνεχίσει. Οι απομονωτές έχουν πεπερασμένο μέγεθος και κάποτε μπορεί η συνάρτηση αποστολής να μην μπορεί να γράψει τα δεδομένα της στον απομονωτή. Τότε η συνάρτηση αποστολής περιμένει μέχρι να υπάρξει διαθέσιμος χώρος στον απομονωτή, δηλαδή η συνάρτηση φέρεται σαν σύγχρονη.

2.13 Επίθεμα μηνύματος Διαφοροποίηση του τύπου των μηνυμάτων που αποστέλονται. Το επίθεμα βρίσκεται μέσα στο μήνυμα. Αν δεν απαιτείται συγκεκριμένος τύπος μηνύματος τότε χρησιμοποιείται επίθεμα wild card, ώστε η recv() αναγνωρίζει κάθε send().

2.14 Παράδειγμα επιθέματος Αποστολή μηνύματος x, με επίθεμα 5, από τη διεργασία 1 στη διεργασία 2, και εκχώρηση του x στο y. Διεργασία 1 Διεργασία 2 x y send(&x,2, 5); Κίνηση των δεδομένων recv(&y,1, 5); Περιμένει ένα μήνυμα από τη διεργασία 1 με ετικέτα 5

2.15 Συλλογική μεταβίβαση μηνυμάτων Συναρτήσεις που αποστέλουν-παραλαμβάνουν ένα ή περισσότερα μηνύματα σε-από μια ομάδα διεργασιών. Μεγαλύτερη αποτελεσματικότητα από τις ξεχωριστές σημειακές συναρήσεις, αλλά δεν είναι απόλυτα απαραίτητες.

2.16 Πανεκπομπή - Πολυεκπομπή Πανεκπομπή (Broadcast): Αποστολή του ίδιου μηνύματος σε όλες τις διεργασίες του προγράμματος. Πολυεκπομπή (Multicast): Αποστολή του ίδιου μηνύματος σε καθορισμένη ομάδα διεργασιών. Διεργασία 0 Διεργασία 1 Διεργασία p - 1 data data data Ενέργεια buf Κώδικας bcast(); bcast(); bcast(); MPI form

2.17 Διανομή (Scatter) Αποστολή ενός ξεχωριστού στοιχείου από ένα πίνακα της ριζικής διεργασίας σε κάθε διεργασία παραλαβής. Το στοιχείο i του πίνακα αποστέλεται στη διεργασία i. Διεργασία 0 Διεργασία 1 Διεργασία p - 1 data data data Ενέργεια buf Κώδικας scatter(); scatter(); scatter(); MPI form

2.18 Συλλογή (Gather) Η ριζική διεργασία συλλέγει ξεχωριστές τιμές από ένα σύνολο διεργασιών και τις αποθηκεύει σε ένα πίνακα. Το στοιχείο i του πίνακα παραλαμβάνεται από τη διεργασία i. Διεργασία 0 Διεργασία 1 Διεργασία p - 1 data data data Ενέργεια buf Κώδικας gather(); gather(); gather(); MPI form

Αναγωγή (Reduce) Συλλογή σε συνδυασμό με καθορισμένη αριθμητική-λογική πράξη. Πχ: Οι τιμές συλλέγονται και αθροίζονται στη ριζική διεργασία. Process 0 Process 1 Process p - 1 data data data Ενέργεια buf + Κώδικας reduce(); reduce(); reduce(); MPI form 2.19

2.20 Εργαλεία λογισμικού για συστοιχίες Τέλη 1980 Parallel Virtual Machine (PVM) πολύ δημοφιλές τότε. Μέσα 1990 Message-Passing Interface (MPI) καθορισμός προτύπου. Υλοποιήσεις: MPICH, LAM. Βασίζονται στο υπόδειγμα προγραμματισμού μεταβιβασης μηνυμάτων. Παρέχουν συναρτήσεις βιβλιοθήκης για αρκετές ακολουθιακές γλώσσες (C, C++, Fortran...).

PVM Parallel Virtual Machine Παράλληλη Εικονική Μηχανή Η πρώτη ευρέως υιοθετημένη προσπάθεια για παράλληλο προγραμματισμό cluster. Αναπτύχθηκε στα by Oak Ridge National Laboratories. Διανέμεται δωρεάν. Ο προγραμματιστής αποσυνθέτει το πρόγραμμα του σε ξεχωριστά τμήματα, συνήθως ένας συντονιστής (master) και μια ομάδα ίδιων εργαζομένων (workers). Το προγράμματα συμβολομετραφράζονται για συγκεκριμένο τύπο υπολογιστή. Πριν από την εκτέλεση του προγράμματος, σε ένα hostfile, ορίζονται οι υπολογιστές που συμμετέχουν. 2.21

2.22 Η δρομολόγηση μηνυμάτων γίνεται από το PVM daemon processes που εγκαθλισταται από το PVM σε κάθε υπολογιστή. Workstation Can have more than one process running on each computer. Workstation PVM daemon Application program (executable) Messages sent through network PVM daemon Application program (executable) MPI implementation we use is similar. Workstation PVM daemon Application program (executable)

2.23 MPI Message Passing Interface Διεπαφή Μεταβίβασης Μηνυμάτων Πρότυπη βιβλιοθήκη μεταβίβασης μηνυμάτων που αναπτύχθηκε από ακαδημαικούς και βιομηχανία με στόχο τη ευρεία χρήση και τη φορητότητα. Ορίζει συναρτήσεις και λειτουργίς, όχι την υλοποίηση. Διάφορες υλοποιήσεις: MPICH, LAM.

2.24 MPI Δημιουργία και εκτέλεση διεργασιών Επίτηδες δεν ορίζεται εξαρτάται από την υλοποίηση. Μόνο στατικές διεργασίες στο MPI v.1. Όλες οι διεργασίες πρέπει να ορίζονται πριν την εκτέλεση και να ξεκινούν ταυτόχρονα. Αρχικά υποστηρίζεται κυρίως το μοντέλο SPMD. Το μοντέλο MPMD είναι δυνατό να υποστηριχτεί με στατική δημιουργία διεργασιών και ταυτόχρονη έναρξη όλων των προγραμμάτων.

2.25 Περιβάλλοντα επικοινωνίας Communicators Ορίζει το περιβάλλον μιας λειτουργίας επικοινωνίας. Οι διεργασίες έχουν έναν αριθμό (rank) που σχετίζεται με ένα περιβάλλον (communicator). Αρχικά όλες οι διεργασίες εγγράφονται σε ένα καθολικό περιβάλλον, ονομαζόμενο MPI_COMM_WORLD, και λαμβάνουν ένα μοναδικό αριθμό (rank), από 0 έως p - 1, για p διεργασίες. Μπορεί να οριστούν και άλλα περιβάλλοντα επικοινωνάς για ομάδες διεργασιών.

Χρήση μοντέλου SPMD main (int argc, char *argv[]) { MPI_Init(&argc, &argv);... MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /*find process rank */ if (myrank == 0) master(); else worker();... MPI_Finalize(); } όπου master() και worker() εκτελούνται από τη διεργασία συντονιστή και εργαζομένων, αντίστοιχα. 2.26

2.27 Ανασφαλής μεταβίβαση μηνύματος Διεργασία 0 Διεργασία 1 Παραλήπτης send(,1, ); lib() send(,1, ); Αποστολέας (α) Πρόθεση recv(,0, ); lib() recv(,0, ); Διεργασία 0 Διεργασία 1 send(,1, ); (β) Πιθανότητα lib() send(,1, ); recv(,0, ); lib() recv(,0, );

2.28 Λύση του MPI: Περιβάλλοντα επικοινωνίας Ορίζει ένα περιβάλλον επικοινωνίας ένα σύνολο διεργασιών που επιτρέπεται να επικοινωνούν μεταξύ τους. Τα περιβάλλοντα επικοινωνίας των βιβλιοθηκών μπορεί να είναι διαφορετικά από αυτά των προγραμμάτων χρηστών. Τα περιβάλλοντα επικοινωνίας χρησιμοποιούνται σε όλες τις σημειακές και συλλογικές επικοινωνίες.

2.29 Ανασταλτικές συναρτήσεις Blocking send - MPI_Send() - επιστρέφει όταν ο απομονωτής μπορεί να χρησιμοποιηθεί ή τροποποιηθεί χωρίς κίνδυνο για το μήνυμα. Blocking receive - MPI_Recv() - επιστρέφει όταν μπορεί να χρησιμοποιηθεί ή τροποποιηθεί χωρίς κίνδυνο για το μήνυμα.

2.30 Παράμετροι blocking send MPI_Send (buf, count, datatype, dest, tag, comm) Διεύθυνση του απομονωτή Τύπος δεδομένων Επίθεμα αποστολής στοιχείων Αριθμός στοιχείων Αριθμός παραλήπτη Επικ. Περιβάλλον αποστολής

2.31 Παράμετροι blocking receive MPI_Recv (buf, count, datatype, src, tag, comm, status) Status Διεύθυνση του απομονωτήτύπος δεδομένων Επίθεμα μετά την λειτουργία παραλαβής στοιχείων Μέγιστος αριθμός Αριθμός αποστολέα Επικ. Περιβάλλον στοιχείων παραλαβής

2.32 Παράδειγμα Αποστολή ενός ακεραίου x από τη διεργασία 0 στην διεργασία 1, MPI_Comm_rank(MPI_COMM_WORLD,&myrank); /* find rank */ if (myrank == 0) { int x; MPI_Send(&x, 1, MPI_INT, 1, msgtag, MPI_COMM_WORLD); } else if (myrank == 1) { } int x; MPI_Recv(&x, 1, MPI_INT, 0, msgtag, MPI_COMM_WORLD, status);

2.33 Μη-ανασταλτικές συναρτήσεις Nonblocking send - MPI_Isend() - επiστρέφει αμέσως ακόμη και πριν ο απομονωτής είναι ασφαλής για νέα χρήση. Nonblocking receive - MPI_Irecv() - επιστρέφει ακόμη και αν δεν έχουν παραληφθεί μηνύματα στον απομονωτή.

2.34 Μορφή nonblocking συναρτήσεων MPI_Isend(buf,count,datatype,dest,tag,comm,request) MPI_Irecv(buf,count,datatype,source,tag,comm, request) Έλεγχος ολοκλήρωσης: MPI_Wait() και MPI_Test(). MPI_Wait()περιμένει μέχρι την ολοκλήρωση και μετά επιστρέφει. MPI_Test()επιστρεφει με ένα flag που δείχνει αν η λειτουργία έχει ολοκληρωθεί ή οχι. Είναι αναγκαίο να ξέρουμε αν μια λειτουργία έχει ολοκληρωθεί. Αυτό επιτυγχάνεται με τη προσπέλαση της παραμέτρου request.

2.35 Παράδειγμα Αποστολή ενός ακεραίου από τη διεργασία 0 στη διεργασία 1, χωρίς η διεργασία 0 να περιμένει άμεσα αλλά αργότερα. MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { int x; MPI_Isend(&x,1,MPI_INT, 1, msgtag, MPI_COMM_WORLD, req1); compute(); MPI_Wait(req1, status); } else if (myrank == 1) { int x; MPI_Recv(&x,1,MPI_INT,0,msgtag, MPI_COMM_WORLD, status); }

2.36 Τύποι αποστολής μηνυμάτων Τυπική - Δεν υποθέτει οτι η αντίστοιχη παραλαβή έχει ξεκινήσει. Το μέγεθος του απομονωτή δεν ορίζεται από το MPI. Αν διατίθεται απομονωτής, η αποστολή μπορεί να ολοκληρωθεί πριν ξεκινήσει η παραλαβή. Απομονωμένη Η αποστολή μπορεί να ξεκινήσει και να επιστρέψεθ πριν ξεκινήσει η αντίστοιχη παραλαβή. Αναγκαίος ο ορισμός μεγέθους απομονωτή μέσω της συνάρτησης MPI_Buffer_attach(). Σύγχρονη Η αποστολή και η παραλαβή ξεκινούν ανεξάρτητα αλλά ολοκληρώνονται μαζί. Αναμονής Η αποστολή μπορεί να ξεκινήσει μόνο αν η αντίστοιχη παραλαβή έχει ξεκινήσει, αλλιώς η αποστολή προκαλεί σφάλμα. Προσοχή στη χρήση.

2.37 Τύποι αποστολής μηνυμάτων (συν.) Κάθε τύπος μπορεί να εφαρμοστεί στις συναρτήσεις αποστολής blocking send και nonblocking send. Για τις συναρτήσεις παραλαβής blocking receive and nonblocking receive προβλέπεται μόνο η τυπική μέθοδος (παραλαβής). Κάθε τύπος συνάρτησης αποστολής μπορεί να συνδυαστεί με οποιοδήποτε τύπο συνάρτησης παραλαβής.

2.38 Παράμετροι syncronous send (ίδιοι με blocking send) MPI_Ssend (buf, count, datatype, dest, tag, comm) Διεύθυνση του απομονωτή Τύπος δεδομένων Επίθεμα αποστολής στοιχείων Αριθμός στοιχείων Αριθμός παραλήπτη Επικ. Περιβάλλον αποστολής

2.39 Συλλογική επικοινωνία Αρκετές διεργασίες, που ορίζονται σε ειδικό communicator. Δεν υπάρχουν επιθέματα. Βασικές συναρτήσεις: MPI_Bcast() - Πανεκπομπή προς όλες τις διεργασίες MPI_Gather() - Συλλογή από ομάδα διεργασιών MPI_Scatter() - Διανομή κατά τμήματα σε ομάδα διεργασιών MPI_Alltoall() - Αποστολή δεδομένων από όλους προς όλους MPI_Reduce() - Αναγωγή τιμών από όλες τις διεργασίες σε μια τιμή MPI_Reduce_scatter()- Αναγωγή τιμών και διανομή αποτελσμάτων MPI_Scan() - Υπολογισμός prefix reductions of data σε διεργασίες MPI_Barrier() - Μέσο συγχρονισμού διεργασιών: μια διεργασία που ανήκει σε μια ομάδα διεργασιών 'σταματά' σε μια διεργασία - 'φράγμα' μέχρι να φθάσουν όλες οι διεργασίες της συγκεκριμένης ομάδας

2.40 Φράγμα (Barrier) Mια διεργασία που ανήκει σε μια ομάδα διεργασιών 'σταματά' σε μια διεργασία - 'φράγμα' μέχρι να φθάσουν όλες οι διεργασίες της συγκεκριμένης ομάδας. Η ομάδα ορίζεται από το communicator. MPI_Barrier(comm) communicator

2.41 Πανεκπομπή (Broadcast) MPI_Bcast(*buf, count, datatype, root, comm) Παράμετροι: *buf απομονωτής μηνύματος count αριθμός στοιχείων στον απομονωτή datatype τύπος δεδομένων στον απομονωτή root αριθμός της διεργασίας ρίζας (αποστολέας) comm περιβάλλον επικοινωνίας (παραλήπτες)

2.42 Συλλογή (Gather) MPI_Gather(*sendbuf, sendcount, sendtype, *recvbuf, recvcount, recvtype, root, comm) Παράμετροι: *sendbuf απομονωτής αποστολής sendcount αριθμός στοιχείων απομ. αποστολής sendtype τύπος δεδομένων αποστολής *recvbuf απομονωτής παραλαβής recvcount αριθμός στοιχείων απομ. παραλαβής recvtype τύπος δεδομένων παραλαβής root αριθμός διεργασίας συλλογής comm περιβάλλον επικοινωνίας

Παράδειγμα Συλλογή δεδομένων στη διεργασία 0, με χρήση δυναμικά εκχωρούμενης μνήμης στη διεργασία παραλαβής: int data[10]; /*data to be gathered from processes*/ MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { MPI_Comm_size(MPI_COMM_WORLD, &grp_size); /*find group size*/ buf = (int *)malloc(grp_size*10*sizeof (int)); /*allocate memory*/ } MPI_Gather (data, 10, MPI_INT, buf, grp_size*10, MPI_INT, 0, MPI_COMM_WORLD) ; Το MPI_Gather() συλλέγει και από τη ρίζα. 2.43

2.44 Διανομή (Scatter) σε τμήματα MPI_Scatter(*sendbuf, sendcount, sendtype, *recvbuf, recvcount, recvtype, root, comm) Παράμετροι: *sendbuf απομονωτής αποστολής sendcount αριθμός στοιχείων αποστολής (σε κάθε διεργασία) sendtype τύπος δεδομένων αποστολής *recvbuf απομονωτής παραλαβής recvcount αριθμός στοιχείων παραλαβής recvtype τύπος δεδομένων παραλαβής root αριθμός διεργασίας ρίζας comm περιβάλλον επικοινωνίας

2.45 Αναγωγή (Reduce) MPI_Reduce(*sendbuf,*recvbuf,count,datatype,op,root,comm) Παράμετροι: *sendbuf απομονωτής αποστολής *recvbuf απομονωτής παραλαβής count αριθμός στοιχείων αποστολής datatype τύπος στοιχείων αποστολής op πράξη αναγωγής Μερικές από τις διαθέσιμες είναι MPI_MAX Μέγιστο MPI_MIN Ελάχιστο MPI_SUM Άθροισμα MPI_PROD Γινόμενο root αριθμός διεργασίας ρίζας comm περιβάλλον επικοινωνίας

2.46 Πρόγραμμα MPI #include mpi.h #include <stdio.h> #include <math.h> #define MAXSIZE 1000 void main(int argc, char *argv) { int myid, numprocs; int data[maxsize], i, x, low, high, myresult, result; char fn[255]; /* file name */ char *fp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid);...

if (myid == 0) {... /* Open input file fn and initialize data */ if ((fp = fopen(fn, r )) == NULL) { printf( Can t open the input file: %s\n\n, fn); exit(1); } for(i = 0; i < MAXSIZE; i++) fscanf(fp, %d, &data[i]); } MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD); /* broadcast data */ x = n/nproc; /* Add my portion Of data */ low = myid * x; high = low + x; for(i = low; i < high; i++) myresult += data[i]; printf( I got %d from %d\n, myresult, myid); /* Compute global sum */ MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf( The sum is %d.\n, result); MPI_Finalize(); 2.47

2.48 Εκτέλεση προγραμμάτων MPI Μεταξύ των διαφόρων υλοποιήσεων του MPI υπάρχουν μικρές διαφορές. Αναφερόμαστε στο MPICH or MPICH-2. Έχει εκδόσεις για Linux και Windows, εύκολη εγκατάσταση.

2.49 Αρχείο hostfile ή machinefile (mf) Γενικά απαιτείται ένα αρχείο mf με τους υπολογιστές που θα χρησιμοποιηθούν. Από εκεί αντλεί πληροφορίες το MPI. Στο MPICH, αν υπάρχει μόνο ένας υπολογιστής τότε αυτό το αρχείο δεν είναι απαραίτητο.

2.50 Εντολές MPICH Δύο βασικές εντολές: mpicc, μεταγλώττιση προγραμμάτων MPI mpirun, εκτέλεση προγραμμάτων MPI.

Παράδειγμα εκτέλεσης προγράμματος σε ένα υπολογιστή 2.51 Στη γραμμή εντολών (με εγκαταστημένο MPICH) Μεταγλώττιση: for C mpicc -o prog prog.c for C++ mpicc -o prog prog.cpp verbose mode Εκτέλεση: mpirun -v -np no_procs prog αριθμός διεργασιών H mpiun αντικαθίσταται σταδιακά από την mpiexec.

2.52 Παράδειγμα εκτέλεσης προγράμματος σε συστοιχία υπολογιστών Δημιουργία του machinefile mf. Μεταγλώττιση όπως προηγούμενα. Εκτέλεση : mpirun -machinefile mf -np 4 prog εκτέλεση του prog σε 4 διεργασίες - αντίγραφα. Κάθε διεργασία θα εκτελεστεί σε ένα υπολογιστή από το machinefile, παίρνοντας τους υπολογιστές με τη σειρά. Αν υπάρχουν περισσότερες διεργασίες από υπολογιστές τότε η ανάθεση γίνεται κυκλικά από την αρχή. Στο machinefile μπορούμε να ορίσουμε μέγιστο αριθμό διεργασιών σε κάθε υπολογιστή.

2.53 Cluster & Grid Computing @ UoM http://www.it.uom.gr/mpiweb/index.htm Οδηγίες χρήσης ειδικά για το Electra Cluster http://www.it.uom.gr/mpiweb/electra.htm# guide.