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