Mpi Retele

3
 Message Passing Interface MPI este un protocol de comunicatie folosit pentru programarea paralela menit sa ofere functionalitate pentru sincronizarea si comunicarea intre procese intr-un mod independent de limbaj si de platforma ( exista implementari ale MPI pentru aproape orice platforma ). Programele MPI sunt orien tate catre procese, asadar pentru obtinerea de performante maxime trebuiesc definite pe fiecare computer atatea procese cate procesoare exista ( sau core-uri ). In cadrul laboratorului vom folosi MPICH2, o implementare free, open-source a MPI-2. Cele mai importante componente ale MPICH sunt mpd ( multi-purpose daemon ) si mpiexec. Mpd are rolul de manager in ceea ce priveste comunicarea si sincronizarea intre procese, iar mpiexec are rolul de a lansa in executie aplicatiile MPI. Siteul oficial unde puteti gasi atat softwareul cat si documentatia necesara instalarii si utilizarii este : http://www.mcs.anl.gov/research/projects/mpich2/index.php Mai multe detalii despre MPI puteti gasi aici : http://www-unix.mcs.anl.gov/mpi Instalare: Pentru instalarea MPICH descarcati de pe siteul mai sus mentionat, de la sectiunea downloads, fisierul mpich2-1.0.7-win32-ia32.msi, apoi instalati-l. In folderul ales pentru instalare se vor crea in urma instalarii, (printre altele) urmatoarele subfoldere: - bin – aici gasiti mpiexec.exe / wmpiexec.exe cu ajutorul caruia veti rula aplicatiile, precum si smpd.exe daemonul MPI - include – contine headere pe care le veti folosi in dezvoltarea aplicatiilor - lib – contine librarii pe care deasemenea le veti folosi in dezvoltarea aplicatiilor. - examples – contine o aplicatie exemplu – calcularea numarului pi folosind MPI

Transcript of Mpi Retele

Message Passing InterfaceMPI este un protocol de comunicatie folosit pentru programarea paralela menit sa ofere functionalitate pentru sincronizarea si comunicarea intre procese intr-un mod independent de limbaj si de platforma ( exista implementari ale MPI pentru aproape orice platforma ). Programele MPI sunt orientate catre procese, asadar pentru obtinerea de performante maxime trebuiesc definite pe fiecare computer atatea procese cate procesoare exista ( sau core-uri ).

In cadrul laboratorului vom folosi MPICH2, o implementare free, open-source a MPI-2. Cele mai importante componente ale MPICH sunt mpd ( multi-purpose daemon ) si mpiexec. Mpd are rolul de manager in ceea ce priveste comunicarea si sincronizarea intre procese, iar mpiexec are rolul de a lansa in executie aplicatiile MPI. Siteul oficial unde puteti gasi atat softwareul cat si documentatia necesara instalarii si utilizarii este : http://www.mcs.anl.gov/research/projects/mpich2/index.php Mai multe detalii despre MPI puteti gasi aici : http://www-unix.mcs.anl.gov/mpi

Instalare: Pentru instalarea MPICH descarcati de pe siteul mai sus mentionat, de la sectiunea downloads, fisierul mpich2-1.0.7-win32-ia32.msi, apoi instalati-l. In folderul ales pentru instalare se vor crea in urma instalarii, (printre altele) urmatoarele subfoldere: - bin aici gasiti mpiexec.exe / wmpiexec.exe cu ajutorul caruia veti rula aplicatiile, precum si smpd.exe daemonul MPI - include contine headere pe care le veti folosi in dezvoltarea aplicatiilor - lib contine librarii pe care deasemenea le veti folosi in dezvoltarea aplicatiilor. - examples contine o aplicatie exemplu calcularea numarului pi folosind MPI

Configurare VS .NET 1. Creati tipul de proiect dorit, apoi deschideti fereastra de proprietati a proiectului 2. Selectati C/C++, apoi adaugati la Additional Include Directories subfolderul include creat in urma instalarii. 3. Selectati Linker, apoi adaugati la Additional Library Directories subfolderul lib deasemenea creat in urma instalarii, apoi la Additional Dependencies adaugati: mpi.lib cxx.lib

Rutine C utile in cadrul acestui laborator:MPI_Init int MPI_Init(int *argc, char ***argv)

Initializeaza mediul de executie.int MPI_Send( void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm )

Transmite un mesaj catre un alt proces.int MPI_Recv( void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status )

Primeste un mesaj de la un alt procesint MPI_Comm_size ( MPI_Comm comm, int *size )

Determina marimea unui grup de proceseint MPI_Comm_rank ( MPI_Comm comm, int *rank )

Determina rangul procesului apelantint MPI_Get_processor_name(char *name, int *resultlen)

Determina numele procesoruluiint MPI_Bcast ( void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm )

Transmite un mesaj de la procesul root la toate celelalte procese din grup.int MPI_Reduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm )

Reduce valorile de la toate procesele, la o singura valoare.int MPI_Finalize()

Inchide mediul de executie MPI. Pentru mai multe rutine si constante, vizitati : http://www-unix.mcs.anl.gov/mpi/www/http://www-unix.mcs.anl.gov/mpi/www/www3/Constants.html

Cei interesati sa lucreze in C++ pot utiliza namespace-ul MPI. Pentru detalii: http://www.osl.iu.edu/research/mpi.net/documentation/reference/0.6. 0/html/N_MPI.htm

Sintaxa mpiexec: Cel mai comun mod de utilizare al mpiexec este : mpiexec n [-host ] aplicatie [: -n -host aplicatie] Pentru mai multe optiuni consultati manualul utilizatorului de pe siteul MPICH2