© Воеводин Вл.В.
Курс лекций
"Параллельная обработка данных"
Лекция 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(); }
© Лаборатория Параллельных Информационных Технологий, НИВЦ МГУ