ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
93
printf("flag = %i\n", flag);
}
if(myrank==1)
{
MPI_Irecv(&c,1, MPI_CHAR, 0, 11, MPI_COMM_WORLD, &req);
MPI_Wait(&req,&status); //Ждем окончания передачи
printf("I'm %i non block recv %c\n",myrank,c);
}
MPI_Finalize();
}
Реализация “Fortran77”
include 'mpif.h'
c Номер процесса
integer myrank
c Объем коммуникатора
integer size
integer digit
integer flag
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=1
print *,'I non block send: ',digit
call MPI_ISEND(digit, 1, MPI_INTEGER,1,0,
+ MPI_COMM_WORLD, req, ierror)
call MPI_Wait(req,status,ierror)
call MPI_Test(req,flag,status)
print *,'Receive status',flag
endif
if(myrank .eq. 1) then
call MPI_IRECV(digit,1, MPI_INTEGER,0,0,
+ MPI_COMM_WORLD, req, ierror)
call MPI_Wait(req,status,ierror)
print *,'MyNumber: ',myrank
print *,'I non block recv: ',digit
endif
call MPI_FINALIZE(ierror)
stop
end