170 likes | 306 Views
MPI – Message Passing Interface. utilizarea in construirea de aplicatii pentru Arhitecturi Paralele de Calcul. Prezentare MPI. specificatie de librarie pentru transmitere de mesaje; propusa ca standard de producatori si utilizatori;
E N D
MPI – Message Passing Interface utilizarea in construirea de aplicatii pentru Arhitecturi Paralele de Calcul Lucian Musat
Prezentare MPI • specificatie de librarie pentru transmitere de mesaje; • propusa ca standard de producatori si utilizatori; • gandita sa ofere performanta mare pe masini paralele dar si in clustere;
Dezvoltatori • Vendors - IBM, Intel, TMC, Meiko, Cray, Convex, Ncube • Library writers - PVM, p4, Zipcode, TCGMSG, Chameleon, Express, Linda • Application specialists and consultants • Companies: ARCO, Convex, Cray Research • Laboratories: ANL, GMD, NSF, etc • Universities: Yale, Cornell, Michigan State U.
Implementari • MPICH – distributia portabila oficiala • MP-MPICH – bazata pe MPICH 1.1.2 pentru multi platforme • winmpich – implementare pentru Windows NT realizata de U. Statului Mississippi • WMPI II – versiune comerciala, implementare a MPI-2, in totalitate thread-safe*, dezvoltata pentru clustere HPC. * = o descriere a unui cod care este ori reentrant or protejat la executia simultana multipla printr-o modalitate de excludere mutuala.
Scopuri • MPI este o librarie, un API, pentru scrierea de aplicatii nu a unui sistem de operare distribuit. Acest scop are impicatii in felul in care se face managementul resurselor. • MPI este modular pentru accelerarea dezvoltarii de librarii paralele portabile. Astfel, referintele sunt locale modulului. (Procesul sursa/destinatie se specifica ca rang in grup mai degraba decat printr-un identificator absolut) • MPI este extensibil. Are un stil orientat obiect. (Aceasta se poate vedea in cerinta functiilor de a manipula obiecte) • MPI suporta folosirea de tipuri de date diferite, eterogene.
MPI-2 • Adaugiri la MPI-1.1 care nu schimba semnificativ tipurile de functionalitate (noi constructori de tipuri de date, schimb facil intre limbaje diferite, interoperabilitate, etc.). • Functionalitati noi (procese dinamice, comunicatie one-sided, parallel I/O, etc.) • Bindings* for Fortran 90 and C++. * binding = implementare a unei specificatii, limbaj, a constructiilor acestuia, in alt limbaj, alta forma, pastrand caracteristicile primului.
MPICH • Implementare portabila pentru MPI • Suporta MPI-1 si MPI-2, prin versiunea MPICH2 • Se preteaza atat la supercalculatoare dar si la retele de calculatoare. • Portabilitatea si performanta se obtine implementand o Interfata de Device Abstracta (ADI). Este alcatuita din toate functiile MPI, implementate ca macrouri sau functii. MPICH contine multe implementari de ADI.
Instalare • Descarcarea mpich.tar.gz sau mpich2-1.0.1.tar.gz de la referintele 3. sau 4. • Dezarhivarea cu tar xzvf <arhiva.tar.gz> • Creare director de instalare: /usr/local/mpich[2] • Rulare: ./configure –prefix=/usr/local/mpich[2] • Compilare: make • Instalare: make install (pentru MPICH2) • Setarea caii catre binarele mpich:export PATH=/usr/local/mpich[2]/bin:$PATH [2] = instalare MPICH in mpich, si MPICH2 in mpich2
Configurare MPICH • Setarea fisierului cu masinile ce vor fi folosite
Testare MPICH Folosind niste exemple din distributie: cd examples/basic make cpi mpirun -np 4 cpi
Formatul functiilor MPI rc = MPI_Xxxxx(parameter, ... ) Exemplu: rc=MPI_Bsend( &buf, count, type, dest, tag, comm) Cod de eroare: Intors ca "rc". MPI_SUCCESS pentru succes
Structura programului MPI MPI include file Initializarea mediului MPI Realizarea muncii cu apeluri de functii de transfer de mesaje Terminarea mediului MPI
Comunicatori si grupuri • MPI foloseste obiecte numite comunicatori si grupuri pentru a defini ce colectii de procese pot comunica intre ele. Cele mai multe functii MPI necesita specificarea unui comunicator ca argument. • Pentru simplitate exista comunicatorul predefinit care include toate procesele MPI numit MPI_COMM_WORLD.
Rangul unui proces • Intr-un comunicator, fiecare proces are un identificator unic, rang. El are o valoare intreaga, unica in sistem, atribuita la initializarea mediului. • Utilizat pentru a specifica sursa si destinatia mesajelor. • De asemenea se foloseste pentru a controla executia programului (daca rank=0 fa ceva / daca rank=1 fa altceva).
Program simplu MPI #include "mpi.h" #include <stdio.h> int main(int argc; char *argv[]) { int numtasks, rank, rc; rc = MPI_Init(&argc,&argv); if (rc != MPI_SUCCESS) { printf ("Error starting MPI program. Terminating.\n"); MPI_Abort(MPI_COMM_WORLD, rc); } MPI_Comm_size(MPI_COMM_WORLD,&numtasks); MPI_Comm_rank(MPI_COMM_WORLD,&rank); printf ("Number of tasks= %d My rank= %d\n", numtasks,rank); /******* do some work *******/ MPI_Finalize(); }
Referinte • http://www-unix.mcs.anl.gov/mpi/ - situl oficial MPI • http://www.mpi-forum.org/docs/docs.html - documentele care descriu standardele MPI 1.0, 1.1, 1.2 si 2.0 • http://www-unix.mcs.anl.gov/mpi/mpich - situl MPICH • http://www-unix.mcs.anl.gov/mpi/mpich2 - situl MPICH2