© Воеводин Вл.В.
Курс лекций
"Параллельная обработка данных"
Лекция 5.
Схематичные примеры MPI-программ
Пример 1a
main(int argc, char **argv)
{
   int me, size;
   . . .
   MPI_Init (&argc, &argv);
   MPI_Comm_rank (MPI_COMM_WORLD, &me);
   MPI_Comm_size (MPI_COMM_WORLD, &size);
   (void)printf ("Process %d size %d\n", me, size);
   . . .
   MPI_Finalize();
}
Пример 1b
#include "mpi.h"
int main (int argc, char **argv)
{
   char message[20];
   int myrank;
   MPI_Status status;
   MPI_Init (&argc, &argv);
   MPI_Comm_rank (MPI_COMM_WORLD, &myrank);
   if (myrank==0)    /* code for process zero */
   {
      strcpy (message, "Hello, there");
      MPI_Send(message, strlen(message), MPI_CHAR, 1, 99, MPI_COMM_WORLD);
   }
   else   /* code for process one */
   {
      MPI_Recv (message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
      printf ("received: %s:\n", message);
   }
   MPI_Finalize();
}
Пример 1c
main(int argc, char **argv)
{
   int me, size;
   int SOME_TAG=0;
   MPI_Status status;
   . . .
   MPI_Init (&argc, &argv);
   MPI_Comm_rank (MPI_COMM_WORLD, &me);    /* local */
   MPI_Comm_size (MPI_COMM_WORLD, &size);  /* local */
   if ((me % 2)==0)
   {
     /* send unless highest-numbered process */
     if ((me+1) < size)
        MPI_Send (..., me+1, SOME_TAG, MPI_COMM_WORLD);
   }
   else
     MPI_Recv (..., me-1, SOME_TAG, MPI_COMM_WORLD, &status);
   . . .
   MPI_Finalize();
}
 © Лаборатория Параллельных Информационных Технологий, НИВЦ МГУ
