ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
91
MPI_Send(&c,1,MPI_CHAR,1,TAG,MPI_COMM_WORLD);
MPI_Recv(&c,1,MPI_CHAR,1,TAG,MPI_COMM_WORLD,&status);
printf("I'm %i block recv %c\n",myrank,c);
}
if(myrank==1)
{
MPI_Recv(&c,1,MPI_CHAR,0,TAG,MPI_COMM_WORLD,&status);
printf("I'm %i block recv %c\n",myrank,c);
c='b';
printf("I'm %i block send %c\n",myrank,c);
MPI_Send(&c,1,MPI_CHAR,0,TAG,MPI_COMM_WORLD);
}
MPI_Finalize();
}
Реализация “Fortran77”
include 'mpif.h'
c Номер процесса
integer myrank
c Объем коммуникатора
integer size
integer digit
integer status(MPI_STATUS_SIZE)
c Инициализация MPI
call MPI_INIT(ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
c Если нет даже 2-х процессов, то выходим
if(size .lt. 2) then
call MPI_FINALIZE(ierror)
stop
endif
if (myrank .eq. 0) then
c Обмениваемся сообщениями и рассказываем об этом на стандартный
вывод
print *,'MyNumber: ',myrank
digit=0
print *,'I block send: ',digit
call MPI_SEND(digit, 1, MPI_INTEGER,1,0,
+ MPI_COMM_WORLD, ierror)
call MPI_RECV(digit,1, MPI_INTEGER,1,0,
+ MPI_COMM_WORLD, status, ierror)
print *,'MyNumber: ',myrank
print *,'I block recv: ',digit
endif
if(myrank .eq. 1) then
call MPI_RECV(digit,1, MPI_INTEGER,0,0,
+ MPI_COMM_WORLD, status, ierror)
print *,'MyNumber: ',myrank
print *,'I block recv: ',digit
print *,'MyNumber: ',myrank
1...,83,84,85,86,87,88,89,90,91,92 94,95,96,97,98,99,100,101,102,103,...180