Message Passing Interface MPI Κϊςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ
Περίγραμμα Μακιματοσ Παράλλθλθ Επεξεργαςία Ειςαγωγι Βαςικά ςτοιχεία του MPI Μεςαίου επιπζδου ςτοιχεία MPI Εργαλεία για ςυγγραφι libraries Σχόλια 2
Υπόβακρο Παράλλθλθ Επεξεργαςία Επικοινωνία με άλλεσ διεργαςίεσ Συνεργατικζσ λειτουργίεσ Μονόπλευρεσ λειτουργίεσ Η διεργαςία MPI 3
Παράλλθλθ Επεξεργαςία Πολλαπλοί εργάτεσ (workers) ι διεργαςίεσ (processes) Αλλθλεπίδραςθ με ανταλλαγι πλθροφορίασ 4
Είδθ Παράλλθλθσ Επεξεργαςίασ Data-parallel : Κδιεσ λειτουργίεσ ςε διαφορετικά δεδομζνα (SIMD) SPMD : Κδιο πρόγραμμα, διαφορετικά δεδομζνα MIMD : Διαφορετικό πρόγραμμα, διαφορετικά δεδομζνα Τα SPMD και MIMD είναι ουςιαςτικά το ίδιο αφοφ κάκε MIMD μπορεί να γίνει SPMD Το SIMD είναι ειδικι περίπτωςθ, αλλά λιγότερο πρακτικό. Το MPI είναι κυρίωσ για SPMD/MIMD. 5
Επικοινωνία Διεργαςιϊν Τα δεδομζνα πρζπει να ανταλλάςςονται με άλλουσ εργάτεσ (επεξεργαςτζσ/κόμβουσ) Συνεργατικι επικοινωνία -- τα δφο (ι περιςςότερα) μζρθ ςυμφωνοφν ςτθν ανταλλαγι δεδομζνων Μονόπλευρθ επικοινωνία -- ζνασ εργάτθσ εκτελεί τθ μετακίνθςθ των δεδομζνων 6
Συνεργατικι Επικοινωνία 7
Συνεργατικι Επικοινωνία (2) Η ανταλλαγι μθνυμάτων (Message-passing) κάνει τθν ανταλλαγι δεδομζνων ςυνεργατικι Τα δεδομζνα πρζπει και να ςταλοφν και να λθφκοφν ρθτϊσ. Πλεονζκτθμα: κάκε αλλαγι ςτθ μνιμθ του δζκτθ (receiver) γίνεται με τθν ςυμμετοχι του δζκτθ. 8
Μονόπλευρθ Επικοινωνία 9
Μονόπλευρθ Επικοινωνία (2) Η μονόπλευρθ επικοινωνία περιλαμβάνει τισ λειτουργίεσ remote memory read και remote memory write. Πλεονζκτθμα: τα δεδομζνα μποροφν να διακινθκοφν χωρίσ αναμονι για τθν απάντθςθ τθσ άλλθσ διεργαςίασ 10
Μοντζλα Hardware Μοντζλα hardware για τθν ανταλλαγι δεδομζνων μεταξφ εργατϊν Κατανεμθμζνθ μνιμθ (Distributed memory) π.χ., Paragon, IBM SPx, workstation network Κοινι μνιμθ (Shared memory) π.χ., SGI Power Challenge, Cray T3D Και τα δφο είδθ μποροφν να χρθςιμοποιθκοφν με τα μοντζλα SIMD ι MIMD. 11
Τι είναι το MPI; Μια βιβλιοκικθ message-passing -- μοντζλο message-passing -- όχι compiler -- όχι ςυγκεκριμζνο προϊόν Για παράλλθλουσ υπολογιςτζσ, clusters, και ετερογενι δίκτυα Πλιρθ χαρακτθριςτικά Σχεδιάςτθκε για να βοθκιςει ςτθν ανάπτυξθ βιβλιοκθκϊν παράλλθλου λογιςμικοφ Σχεδιάςτθκε για να προςφζρει πρόςβαςθ ςε προθγμζνο παράλλθλο hardware ςε -- τελικοφσ χριςτεσ -- ςυγγραφείσ βιβλιοκθκών -- ςχεδιαςτζσ εργαλείων 12
Ιςτορία του MPI Αρχι ςτο Williamsburg Workshop, Απρίλιοσ 1992 Οργανϊκθκε ςτο Supercomputing '92 (Νοζμβριοσ 1992) Pre-final draft ςτο Supercomputing '93 Final draft Μάϊοσ 1994 Διακζςιμα public implementations ςτο Web: http://www.mcs.anl.gov/research/projects/mpich2/ 13
Ποιοσ ζγραψε το MPI Ευρεία ςυμμετοχι IBM, Intel, TMC, Meiko, Cray, Convex, Ncube Συγγραφείσ βιβλιοκθκών PVM, p4, Zipcode, TCGMSG, Chameleon, Express, Linda Ειδικοί ςε εφαρμογζσ και ςφμβουλοι 14
Χαρακτθριςτικά του MPI Γενικά Οι Communicators ςυνδυάηουν context και group για αςφάλεια των μθνυμάτων Αςφάλεια threads Επικοινωνία Point-to-point buffers και derived datatypes Τρόποι επικοινωνίασ: normal (blocking και non-blocking), synchronous, ready, buffered Συλλεκτικι επικοινωνία built-in και user-defined ςυλλεκτικζσ λειτουργίεσ Μεγάλο πλικοσ ρουτινών μετακίνθςθσ δεδομζνων Οριςμόσ υποομάδων 15
Χαρακτθριςτικά του MPI (2) Εφαρμογο-ςτρεφείσ τοπολογίεσ Built-in υποςτιριξθ για grids και γράφουσ Profiling Επιτρζπεται ςτο χριςτθ να ςυλλάβει τα MPI calls και να τα αντικαταςτιςει με δικά του Περιβάλλον προγραμματιςμοφ Inquiry ζλεγχοσ ςφαλμάτων 16
Τι δεν είναι το MPI Δεν υλοποιοφνται ιδζεσ ι ζννοιεσ μθ ςχετικζσ με message-passing: process management remote memory transfers active messages Threads virtual shared memory 17
Το MPI είναι μικρό ι μεγάλο; Το MPI είναι μεγάλο (125 ςυναρτιςεισ) Η εκτεταμζνθ λειτουργικότθτα του MPI απαιτεί πολλζσ ςυναρτιςεισ Το πλικοσ των ςυναρτιςεων δε ςθμαίνει πολυπλοκότθτα ι βραδφτθτα Το MPI είναι μικρό (6 ςυναρτιςεισ) Πολλά παράλλθλα προγράμματα μποροφν να γραφτοφν με 6 μόνο βαςικζσ ςυναρτιςεισ. Το MPI είναι το μζγεκοσ που κζλουμε Ζχει δυνατότθτα επιλογών και ευελιξία αν τθ χρειαηόμαςτε. Δε χρειάηεται να γνωρίηει κανείσ ΟΛΟ το MPI για να το χρθςιμοποιιςει. 18
Πότε να χρθςιμοποιϊ το MPI; Όταν κζλεισ ζνα φορθτό παράλλθλο πρόγραμμα Όταν γράφεισ μια παράλλθλθ βιβλιοκικθ Όταν ζχεισ ακανόνιςτεσ ι δυναμικζσ ςχζςεισ μεταξφ των δεδομζνων οι οποίεσ δεν ταιριάηουν ςε κάποιο μοντζλο παράλλθλθσ επεξεργαςίασ Πότε να μη χρηςιμοποιώ το MPI; Όταν μπορείσ να χρθςιμοποιιςεισ, πχ. παράλλθλθ Fortran 90 Αν δε χρειάηεςαι παραλλθλιςμό Όταν μπορείσ να χρθςιμοποιιςεισ ζτοιμεσ βιβλιοκικεσ (πικανϊσ γραμμζνεσ ςε MPI!) 19
Βαςικά Συγγραφι προγραμμάτων MPI. Compiling και linking. Εκτζλεςθ προγραμμάτων. Περιςςότερεσ πλθροφορίεσ. William Gropp, Ewing Lusk, and Anthony Skjellum Using MPI, Zdzislaw Meglicki The LAM companion to ``Using MPI Ian Foster Designing and Building Parallel Programs. Peter Pacheco A Tutorial/User's Guide for MPI ftp://math.usfca.edu/pub/mpi/mpi.guide.ps. http://www.mcs.anl.gov/mpi.
Συγγραφι προγραμμάτων MPI #include mpi.h #include <stdio.h> int main(argc, argv) int argc; char **argv; { MPI_Init(&argc, &argv); printf("hello world\n"); MPI_Finalize(); return 0; }
Σχόλια #include "mpi.h" : δίνει βαςικοφσ οριςμοφσ και τφπουσ του MPI MPI_Init : ξεκινάει το MPI MPI_Finalize : ζξοδοσ από το MPI Όλεσ οι μθ-mpi ρουτίνεσ εκτελοφνται τοπικά ςε κάκε διεργαςία. Ζτςι, πχ, το printf εκτελείται ςε κάκε διεργαςία
Εγκατάςταςθ υλοποίθςθσ ανοιχτοφ κϊδικα: MPICH2 Κατεβάηουμε τθν υλοποίθςθ MPICH2 (πθγι Argonne National Laboratory) http://www.mcs.anl.gov/research/projects/mpich2/ Πλατφόρμεσ UNIX, Windows (ΙΑ32 και ΕΜ64Τ/AMD64) Απαιτείται χριςθ C-compiler. Πχ., για Windows μπορεί να γίνει χριςθ του open-source πλατφόρμασ MinGW http://www.mingw.org/ Μπορεί να γίνει χριςθ οποιουδιποτε compiler (πχ Visual Studio)
Μετάφραςθ του κϊδικα Windows: Ζςτω ότι το MPI βρίςκεται ςτο φάκελο C:\Program Files\MPICH2 Κάνουμε compilation κάποιου προγράμματοσ mpicode.c παράγοντασ το εκτελζςιμο mpicode.exe χρθςιμοποιϊντασ κάποιο C-compiler, πχ. τον gcc compiler του πακζτου MinGW: gcc -o mpicode.exe -I "C:\Program Files\MPICH2\include" -L "C:\Program Files\MPICH2\lib" mpicode.c "C:\Program Files\MPICH2\lib\mpi.lib" Απαραίτθτθ θ χριςθ του κατάλλθλου include-path και library-path κακϊσ και τθσ βιβλιοκικθσ mpi.lib
Εκτζλεςθ προγραμμάτων MPI (1) Σε DOS command window, το οποίο τρζχει ςε administrator-mode, εκτελοφμε τθν εντολι mpiexec -n <πλήθος διεργαζιών> mpicode.exe Η παράμετροσ hosts μασ λζει ςε ποιοοφσ υπολογιςτζσ να τρζξουμε τισ διεργαςίεσ. Πχ. mpiexec -hosts 3 <μηχανή1> 3 <μηχανή2> 4 <μηχανή3> 1 mpicode.exe Εκτελεί το πρόγραμμα ςε τρεισ μθχανζσ: ςτθ «μθχανι1» κα τρζξουν 3 διεργαςίεσ, ςτθ «μθχανι2» κα τρζξουν 4 διεργαςίεσ και ςτθ «μθχανι3» 1 διεργαςία. Το MPI μπορεί να τρζξει ςε ζνα μόνο μθχάνθμα ΟΛΕΣ τισ διεργαςίεσ. Καταργεί ουςιαςτικά τον παραλλθλιςμό αλλά πολφ χριςιμο για debugging όταν δεν υπάρχει διακζςιμο cluster mpiexec localonly <πλήθος διεργαζιών> mpicode.exe
Εκτζλεςθ προγραμμάτων MPI (2) Το mpiexec κάνει χριςθ ενόσ Process Manager (PM): πρόγραμμα «πράκτορασ» που δθμιουργεί τισ παράλλθλεσ διεργαςίεσ και τισ διαχειρίηεται αποφαςίηοντασ ποιοσ επεξεργαςτισ κα τισ εκτελζςει και πότε. Ο βαςικόσ PM είναι o simple. Ωςτόςο μποροφμε να ορίςουμε και άλλον PMI όπωσ το smpd. Στο command window γράφουμε smpd start Καλι πθγι πλθροφοριϊν για τθν εκτζλεςθ προγραμμάτων και το MPI γενικότερα: http://www.mpi-forum.org
Περιβάλλον προγράμματοσ Δφο βαςικά χαρακτθριςτικά ενόσ παράλλθλου προγράμματοσ είναι (α) πόςεσ διεργαςίεσ υπάρχουν και (β) πϊσ βρίςκουμε τον αρικμό τθσ κάκε διεργαςίασ Η μεταβλθτι MPI_Comm_size δίνει το πλικοσ των διεργαςιϊν του προγράμματοσ Η ερϊτθςθ «Ποια διεργαςία είμαι εγϊ?» απαντάται από τθ μεταβλθτι MPI_Comm_rank. Το MPI_Comm_rank είναι ζνασ ακζραιοσ μεταξφ 0 και MPI_Comm_size-1
Ζνα απλό πρόγραμμα #include "mpi.h" #include <stdio.h> int main( argc, argv ) 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 ); printf( "Hello world! I'm %d of %d\n", rank, size ); MPI_Finalize(); return 0; }