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

Σχετικά έγγραφα
Ε-85: Ειδικά Θέµατα Λογισµικού

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

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

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

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

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

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

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

Message Passing Interface (MPI)

Message Passing Interface (MPI)

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

MPI: Message Passing Interface

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

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


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

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

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

Message Passing Interface (MPI)

MPI: Message Passing Interface

Message Passing Interface (MPI)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MPI: Message Passing Interface

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Δομημένος Προγραμματισμός (ΤΛ1006)

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

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

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

Αντικειµενοστρεφής Προγραµµατισµός

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Εισαγωγή στον Προγραμματισμό (με. τη C)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Ενδεικτικές λύσεις και στατιστικά

Προγραμματισμό για ΗΜΥ

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

Transcript:

Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 Επικοινωνία Πολλάκατανεµηµένα συστήµατα υλοποιούνται πάνω από ένα απλό µοντέλο µηνυµάτων επικοινωνίας, π.χ. Sockets «Εισαγωγή στο MPI» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 1 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 2 Κλήση Socket Bind Listen Accept Connect Send Receive Close Βασικές Κλήσεις για Sockets Λειτουργία ηµιουργία νέου άκρου επικοινωνίας Σύνδεση τοπικής διεύθυνσης σε ένα socket Ανακοίνωση προθυµίας για αποδοχή συνδέσεων Αναστολή εκτέλεσης έως ότου φτάσει µια αίτηση σύνδεσης Ενεργή προσπάθεια δηµιουργίας µιας σύνδεσης Αποστολή δεδοµένων µέσω µιας σύνδεσης Λήψη δεδοµένων µέσω µιας σύνδεσης Τερµατισµός της σύνδεσης Message-Passing Interface (MPI) Τα Sockets έχουν σχεδιαστεί για δικτυακή επικοινωνία (TCP) Υποστηρίζουν απλές λειτουργίες αποστολής / λήψης Το επίπεδο αφαίρεσης που παρέχουν δεν είναι κατάλληλο για άλλα πρωτόκολλα σε συστάδες σταθµών εργασίας ή µεγάλα παράλληλα συστήµατα Ανάγκη µιας διεπαφής µε πιο προχωρηµένες λειτουργίες Μεγάλος αριθµός µη συµβατών βιβλιοθηκών και πρωτοκόλλων Ανάγκη για ύπαρξη ενός προτύπου Message-passing interface (MPI) Ανεξάρτητο από το υλικό Σχεδιασµένο για παράλληλες εφαρµογές Βασική ιδέα: επικοινωνία µεταξύ οµάδων διεργασιών Κάθε σύνδεση χαρακτηρίζεται από ένα ζευγάρι (groupid, processid) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 3 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 4 Μοντέλα Παράλληλου Υπολογισµού Κοινή Μνήµη (Νήµατα) Posix Threads OpenMP: πρότυπο υψηλότερου επιπέδου Μεταβίβαση µηνυµάτων (MPI) Οι διεργασίες έχουν µόνο τοπική µνήµη αλλά µπορούν να επικοινωνήσουν µε άλλες µε ανταλλαγή µηνυµάτων Η µεταφορά δεδοµένων µεταξύ διεργασιών απαιτεί την εκτέλεση λειτουργιών και από τις δύο διεργασίες Το δίκτυο επικοινωνίας δεν αποτελεί τµήµα του µοντέλου υπολογισµού (υπερκύβος, πλέγµα, ) Λειτουργίες αποµακρυσµένης µνήµης Επικοινωνία µιας πλευράς ( One-sided ) MPI-2, IBM s LAPI Μια διεργασία µπορεί να προσπελάσει τη µνήµη µιας άλλης χωρίς τη συµµετοχή της τελευταίας Η προσπέλαση όµως γίνεται ρητά και χωρίς διαφάνεια Μοντέλο Μεταβίβασης Μηνυµάτων Ηµεταβίβαση µηνυµάτων χρησιµοποιείται για επικοινωνία µεταξύ διεργασιών µε διαφορετικά πεδία διευθύνσεων Η ανταλλαγή δεδοµένων γίνεται µε συνεργασία και ρητή αποστολή λήψη µεταξύ των διεργασιών. Οποιαδήποτε αλλαγή στη µνήµη της ληφθείσας διεργασίας πραγµατοποιείται µε σαφή συµµετοχή της τελευταίας Η διαδιεργασιακή επικοινωνία περιλαµβάνει Συγχρονισµό εκτέλεσης Μετακίνηση δεδοµένων µεταξύ των δύο πεδίων διευθύνσεων Συνδυάζονται επικοινωνία και συγχρονισµός, αντίθετα µε ότι συµβαίνει στην περίπτωση των λειτουργιών αποµακρυσµένης µνήµης E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 5 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 6 1

Συνεργατικές Λειτουργίες Επικοινωνίας ιεργασία 0 ιεργασία 1 Send(data) Receive(data) Λειτουργίες Μίας Πλευράς Οιλειτουργίες µίας πλευράς µεταξύ διεργασιών περιλαµβάνουν αποµακρυσµένες εγγραφές και αναγνώσεις µνήµης Μόνο µια διεργασία χρειάζεται να συµµετέχει ρητά στην επικοινωνία Ένα πλεονέκτηµα είναι ότι η επικοινωνία και ο συγχρονισµός είναι διαχωρισµένα Οι λειτουργίες µιας πλευράς αποτελεί τµήµα του MPI-2. ιεργασία 0 ιεργασία 1 Put(data) (memory) (memory) Get(data) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 7 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 8 Τιείναι το MPI Προσδιορισµός µιας βιβλιοθήκη µεταβίβασης µηνυµάτων Επεκταµένο µοντέλο µεταβίβασης µηνυµάτων εν είναι γλώσσα προγραµµατισµού ή προδιαγραφές µεταγλωττιστή εν αποτελεί µια συγκεκριµένη υλοποίηση Υποστηρίζει παράλληλα και κατανεµηµένα συστήµατα και ετερογενή δίκτυα επικοινωνίας Έχει σχεδιαστεί για να παρέχει πρόσβαση σε υλικό παράλληλης επεξεργασίας σε χρήστες, συγγραφείς βιβλιοθηκών και σχεδιαστές εργαλείων Παρέχει έναν ευέλικτο, αποδοτικό και µεταφέρσιµο τρόπο για την ανάπτυξη παράλληλων προγραµµάτων ιευκολύνει την ανάπτυξη βιβλιοθηκών που µπορούν να αποτρέπουν την ανάγκη εκµάθησής του από τους απλούς χρήστες #include <stdio.h> Παράδειγµα 1 (σε C) int main( int argc, char *argv[] ) MPI_Init( &argc, &argv ); printf( "Hello, world!\n" ); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 9 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 10 program main use MPI integer ierr Παράδειγµα 1 (σε Fortran) call MPI_INIT( ierr ) print *, 'Hello, world!' call MPI_FINALIZE( ierr ) end Παρατηρήσεις Οι ρουτίνες σε C και Fortran είναι παρόµοιες Στην C: Το αρχείο mpi.h πρέπει να γίνει #include Οι ρουτίνες MPI επιστρέφουν κωδικούς λάθους ή την τιµή MPI_SUCCESS Στην Fortran: Το αρχείο mpif.h πρέπει να περιλαµβάνεται Όλες οι κλήσεις MPI είναι υπορουτίνες, µε χώρο για την τιµή επιστροφής σφάλµατος ως τελευταίο όρισµα Το MPI-2 ορίζει τις κλήσεις για C++ και Fortran-90 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 11 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 12 2

Εκτέλεση Προγραµµάτων Τοπρότυπο MPI-1 δεν καθορίζει τον τρόπο εκτέλεσης ενός προγράµµατος MPI Η εκκίνηση ενός προγράµµατος MPI εξαρτάται από την υλοποίηση και µπορεί να περιλαµβάνει διάφορες εντολές, ορίσµατα προγράµµατος και µεταβλητές περιβάλλοντος Η εντολή mpiexec <args> είναι τµήµα του MPI-2, χωρίς να αποτελεί όµως απαίτησή του Στο σύνολο των περιπτώσεων, η εκτέλεση ενός προγράµµατος MPI γίνεται µε τις εντολές mpiexecή mpirun Περιβάλλον Εκτέλεσης υο βασικά στοιχεία ενός παράλληλου προγράµµατος: Πόσες διεργασίες συµµετέχουν στον υπολογισµό; Ποια διεργασία είµαι; Το MPI παρέχει συναρτήσεις για τις παραπάνω ερωτήσεις: MPI_Comm_size: επιστρέφει τον αριθµό των διεργασιών MPI_Comm_rank: επιστρέφει το rank, έναν αριθµό µεταξύ 0 και size-1, που προσδιορίζει την τρέχουσα διεργασία E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 13 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 14 #include <stdio.h> Παράδειγµα 2 (σε C) int main( int argc, char *argv[] ) int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); Παράδειγµα 2 (σε Fortran) program main use MPI integer ierr, rank, size call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, rank, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, size, ierr ) print *, 'I am ', rank, ' of ', size call MPI_FINALIZE( ierr ) end printf( "I am %d of %d\n", rank, size ); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 15 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 16 Αποστολή και Λήψη εδοµένων Πρέπεινα προσδιοριστούν κάποια στοιχεία που είναι απαραίτητα για την επικοινωνία: Περιγραφή δεδοµένων Προσδιορισµός διεργασιών Αναγνώριση λήψη µηνυµάτων από τον αποδέκτη Σηµασία ολοκλήρωσης αποστολής λήψης δεδοµένων ιεργασία 0 ιεργασία 1 Send(data) Receive(data) Μεταβίβαση Μηνυµάτων Μεταφορά δεδοµένων και συγχρονισµός Απαιτεί συνεργασία µεταξύ αποστολέα και παραλήπτη Η συνεργασία δεν είναι πάντοτε προφανής στον κώδικα ιεργασία 0 ιεργασία 1 Χρόνος Μπορώ να στείλω? Ναι E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 17 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 18 3

Βασικές Έννοιες Οι διεργασίες οργανώνονται σε οµάδες (groups). Κάθε µήνυµα αποστέλλεται σε ένα περιβάλλον επικοινωνίας (context) και πρέπει να ληφθεί µέσα από το ίδιο περιβάλλον. Ο συνδυασµός group και context ορίζουν έναν communicator. Μια διεργασία αναγνωρίζεται από τον αριθµό της (rank) στο group που σχετίζεται µε έναν communicator. MPI_COMM_WORLD: Ο βασικός communicator του οποίου το group περιλαµβάνει όλες τις διεργασίες της εφαρµογής Περιγραφή εδοµένων Ταδεδοµένα ενός µηνύµατος που αποστέλλεται ή λαµβάνεται περιγράφονται µε τρία στοιχεία: (address, count, datatype) Ένας τύπος δεδοµένων (datatype) του MPI µπορεί να είναι: Προκαθορισµένος, σύµφωνα µε τους τύπους δεδοµένων της γλώσσας προγραµµατισµού (π.χ., MPI_INT, MPI_DOUBLE_PRECISION) Ένας πίνακας τύπων δεδοµένων του MPI Ένα υποσύνολο ενός πίνακα Μια αυθαίρετη δοµή από τύπους δεδοµένων Ο χρήστης µπορεί να ορίσει δικούς του τύπους δεδοµένων E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 19 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 20 Τύποι εδοµένων MPI_CHAR (signed) char MPI_SHORT (signed) short int MPI_INT (signed) int MPI_LONG (signed) long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double Ετικέτες Μηνυµάτων Ταµηνύµατα αποστέλλονται µαζί µε µια κατάλληλη ετικέτα (ακέραιο αριθµό) που ορίζει ο χρήστης, διευκολύνοντας της διεργασία που θα λάβει το µήνυµα να προσδιορίσει το µήνυµα Τα µηνύµατα µπορούν εποµένως να επιλέγονται κατά την λήψη τους µε βάση την ετικέτα τους Η τιµή ετικέτας MPI_ANY_TAG επιτρέπει τη λήψη µηνυµάτων οποιασδήποτε ετικέτας E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 21 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 22 Βασική Κλήση Αποστολής MPI_Send (addr, count, datatype, dest, tag, comm) Το µήνυµα περιγράφεται από τα (address, count, datatype). Η διεργασία αποδέκτης καθορίζεται από το όρισµα dest, που είναι ο αριθµός (rank) της διεργασίας αυτής στον communicator που ορίζεται από το όρισµα comm. Όταν η συνάρτηση επιστρέψει, τα δεδοµένα έχουν παραδοθεί στο σύστηµα και ο buffer του µηνύµατος (address) µπορεί να χρησιµοποιηθεί πάλι. Το µήνυµα µπορεί να µην έχει παραληφθεί από την διεργασία αποδέκτη. Η κλήση είναι blocking, προκαλεί αναστολή εκτέλεσης µέχρι να ολοκληρωθεί Βασική Κλήση Λήψης MPI_Recv(addr, count, datatype, source, tag, comm, &status) Περιµένει µέχρι το κατάλληλο µήνυµα (όσον αφορά τα ορίσµατα source & tag) παραληφθεί από το σύστηµα. Το όρισµα source είναι ο αριθµός (rank) της διεργασίας αποστολέας στον communicator που ορίζεται από το όρισµα comm Το όρισµα source µπορεί να είναι MPI_ANY_SOURCE. Το όρισµα status περιέχει επιπλέον πληροφορίες Επιτρέπεται η λήψη λιγότερων στοιχείων από count του τύπου datatype, µα περισσότερων αποτελεί σφάλµα Η κλήση είναι blocking, προκαλεί αναστολή εκτέλεσης µέχρι να ολοκληρωθεί E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 23 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 24 4

Πληροφορίες Τοόρισµα status είναι µια δοµή δεδοµένων στο πρόγραµµα του χρήστη Παράδειγµα (σε C): int recvd_tag, recvd_from, recvd_count; MPI_Status status; MPI_Recv(..,MPI_ANY_SOURCE,MPI_ANY_TAG,..,&status); recvd_tag = status.mpi_tag; recvd_from = status.mpi_source; MPI_Get_count( &status, datatype, &recvd_count ); #include <stdio.h> Παράδειγµα 3 (1/2) int main(int argc, char *argv[]) int rank, size, i; int buffer[10]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (size < 2) printf("please run with two processes.\n"); fflush(stdout); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 25 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 26 Παράδειγµα 3 (2/2) if (rank == 0) for (i=0; i<10; i++) buffer[i] = i; MPI_Send(buffer, 10, MPI_INT, 1, 123, MPI_COMM_WORLD); if (rank == 1) for (i=0; i<10; i++) buffer[i] = - 1; MPI_Recv(buffer, 10, MPI_INT, 0, 123, MPI_COMM_WORLD, &status); for (i=0; i<10; i++) if (buffer[i]!= i) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 27 printf("error: buffer[%d] #define BUFLEN 512 Παράδειγµα 4 (1/3) int main(int argc, char *argv[]) int i, myid, numprocs, next, rc; char buffer[buflen]; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); strcpy(buffer,"hello there"); next = (myid + 1) %numprocs; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 28 Παράδειγµα 4 (2/3) if (myid == 0) printf("%d sending '%s' \n",myid,buffer); MPI_Send(buffer, strlen(buffer)+1, MPI_CHAR, next, 99, MPI_COMM_WORLD); printf("%d receiving \n",myid); MPI_Recv(buffer, BUFLEN, MPI_CHAR,MPI_ANY_SOURCE, 99, MPI_COMM_WORLD, &status); Παράδειγµα 4 (3/3) else /* myid!= 0 */ printf("%d receiving \n",myid); MPI_Recv(buffer, BUFLEN, MPI_CHAR, MPI_ANY_SOURCE, 99, MPI_COMM_WORLD, &status); printf("%d received '%s' \n", myid, buffer); MPI_Send(buffer, strlen(buffer)+1, MPI_CHAR, next, 99, MPI_COMM_WORLD); printf("%d sent '%s' \n", myid,buffer); printf("%d received '%s' \n",myid,buffer); MPI_Barrier(MPI_COMM_WORLD); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 29 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 30 5

Χρησιµότητα Τύπων εδοµένων Τα δεδοµένα χαρακτηρίζονται µε τον τύπο τους Εποµένως, µία υλοποίηση του MPI µπορεί να υποστηρίζει επικοινωνία µεταξύ διεργασιών σε υπολογιστές µε διαφορετικές αναπαραστάσεις µνήµης και µεγέθη βασικών τύπων (ανοµοιογενής επικοινωνία). Ο καθορισµό του τρόπου µε τον οποίο αποθηκεύονται τα δεδοµένα µιας εφαρµογής στη µνήµη µειώνει τις αντιγραφές τµηµάτων µνήµης µέσα στην υλοποίηση Επιτρέπει τη χρήση ειδικού υλικού (hardware) όταν είναι διαθέσιµο Βασικές Κλήσεις Οιπερισσότερες παράλληλες εφαρµογές µπορούν να γραφτούν χρησιµοποιώντας µόνο τις ακόλουθες έξι ρουτίνες: MPI_Init MPI_Finalize MPI_Comm_size MPI_Comm_rank MPI_Send MPI_Recv E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 31 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 32 Κλήση MPI_Βsend MPI_Send MPI_Ssend MPI_Sendrecv MPI_Isend MPI_Issend MPI_Recv MPI_Irecv Κλήσεις Επικοινωνίας MPI Λειτουργία Τοποθέτησε ένα εξερχόµενο µήνυµα σε ένα τοπικό buffer αποστολής Στείλεένα µήνυµα και περίµενε µέχρι να αντιγραφεί σε έναν τοπικό ή αποµακρυσµένο buffer Στείλεένα µήνυµα και περίµενε µέχρι να ξεκινήσει η λήψη του Στείλε ένα µήνυµα και περίµενε για µια απάντηση Πέρναµια αναφορά στο εξερχόµενο µήνυµα και συνέχισε την εκτέλεση του προγράµµατος Πέρναµια αναφορά στο εξερχόµενο µήνυµα και περίµενε µέχρι να ξεκινήσει η λήψη του Παρέλαβε ένα µήνυµα, µπλοκάροντας αν δεν υπάρχει κάποιο Έλεγξεαν υπάρχει εισερχόµενο µήνυµα αλλά χωρίς µπλοκάρισµα E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 33 Συλλογικές Λειτουργίες στο MPI Οισυλλογικές λειτουργίες καλούνται από όλες τις διεργασίες σε έναν communicator Η κλήση MPI_Bcastκατανέµει δεδοµένα από µία διεργασία (τη ρίζα) σε όλες τις υπόλοιπες σε έναν communicator. Η κλήση MPI_Reduceσυνδυάζει δεδοµένα από όλες τις διεργασίες σε έναν communicator και επιστρέφει το αποτέλεσµα σε µια διεργασία. Σε πολλούς αριθµητικούς αλγορίθµους, το ζεύγος κλήσεων Send/Recvµπορεί να αντικατασταθεί µε το Bcast/Reduce, βελτιώνοντας την απλότητα και την απόδοση E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 34 Παράδειγµα Υπολογισµός π (1/2) #include <math.h> int main(int argc, char *argv[]) int done = 0, n, myid, numprocs, i, rc; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x, a; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); while (!done) if (myid == 0) printf("enter the number of intervals:(0 quits)"); scanf("%d",&n); MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) break; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 35 Παράδειγµα Υπολογισµός π (2/2) h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) x = h * ((double)i - 0.5); sum += 4.0 / (1.0 + x*x); mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf("pi is approx %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT)); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 36 6

Εναλλακτικές Βασικές Κλήσεις Οιπερισσότερες παράλληλες εφαρµογές µπορούν να γραφτούν χρησιµοποιώντας µόνο τις ακόλουθες έξι ρουτίνες: MPI_Init MPI_Finalize MPI_Comm_size MPI_Comm_rank MPI_Bcast MPI_Reduce MPI και Αδιέξοδα Έστωη αποστολή ενός µεγάλου µηνύµατος από τη διεργασία 0 στη διεργασία 1 Αν δεν υπάρχει αρκετός χώρος αποθήκευσης στον προορισµό, η κλήση send πρέπει να περιµένει ώστε ο χρήστης να παρέχει κατάλληλο χώρο µνήµης (µέσω της receive) Έστω το ακόλουθο σενάριο ιεργασία 0 Send(1) Recv(1) ιεργασία 1 Send(0) Recv(0) Η κατάσταση καλείται «µη ασφαλής» επειδή εξαρτάται από τη διαθεσιµότητα των προσωρινών χώρων αποθήκευσης του συστήµατος (system buffers) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 37 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 38 Πιθανές Λύσεις Προσεκτική διάταξη των λειτουργιών: ιεργασία 0 Send(1) Recv(1) ιεργασία 1 Recv(0) Send(0) Χρήση λειτουργιών χωρίς αναστολή εκτέλεσης (nonblocking): ιεργασία 0 Isend(1) Irecv(1) Waitall ιεργασία 1 Isend(0) Irecv(0) Waitall Η βιβλιοθήκη MPICH H βιβλιοθήκη MPICH αποτελεί µια υψηλών επιδόσεων µεταφέρσιµη υλοποίηση του προτύπου MPI. ιαθέσιµη για µεγάλα υπολογιστικά συστήµατα, συστάδες υπολογιστών και ετερογενή δίκτυα Σε µια πληθώρα συστηµάτων, ο χρήστης πρέπει να κάνει τα ακόλουθα: configure [ρυθµίσεις βιβλιοθήκης] make [δηµιουργία βιβλιοθήκης] mpicc -o pi.exe pi.c [µεταγλώττιση προγράµµατος] mpd & [εκκίνηση MPI daemon] mpirun -np 10 pi.exe [εκτέλεση προγράµµατος] E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 39 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 40 Βασικές Ιδιότητες του MPI-2 υναµική διαχείριση διεργασιών υναµική εκκίνηση διεργασιών υναµική δηµιουργία συνδέσεων Επικοινωνίες µίας πλευράς Put/get Κάποιες επιπλέον λειτουργίες Παράλληλο I/O Πλεονεκτήµατα Το MPI περιλαµβάνει ρητό παραλληλισµό που συνήθως παρέχει καλύτερη απόδοση. Περιλαµβάνει έναν µεγάλο αριθµό βελτιστοποιηµένων κλήσεων επικοινωνίας. Γενικά, υπάρχει επικάλυψη επικοινωνίας και υπολογισµών Προβλήµατα από την τοποθέτηση των δεδοµένων εµφανίζονται σπάνια. Ο συνδυασµός επικοινωνίας και συγχρονισµού µειώνει τις επιβαρύνσεις. E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 41 E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 42 7

Μειονεκτήµατα Ηπαραλληλοποίηση, ανάπτυξη και το debugging των εφαρµογών µπορεί να είναι αρκετά δύσκολο. Τα κόστη επικοινωνίας µπορεί να είναι σηµαντικές. Οι υπολογισµοί πρέπει να είναι σηµαντικοί σε µέγεθος ώστε να υπερκαλύπτουν τα κόστη επικοινωνίας. Οι καθολικές λειτουργίες µπορεί να είναι πολύ ακριβές. Απαιτούνται σηµαντικές αλλαγές στον αρχικό ακολουθιακό κώδικα. Είναι δύσκολο να επιτευχθεί δυναµική εξισορρόπηση φόρτου. E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 43 8