165
else
if (rank == 1) {
dest = 0;
src = 0;
rc = MPI_Recv(&inmsg, 1, MPI_CHAR, src, tag, MPI_COMM_WORLD,
&Stat);
rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
}
MPI_Finalize ();
}
Егер бағдарлама кӛп процестер санымен жіберілсе,
онда жіберулерді
нақты тек нӛлінші және бірінші процестер ғана орындайды. MPI_Init
функциясы орындалуынан туындаған қалған процестер MPI_Finalize
функциясын орындап бірден аяқталады
.
Фортран тіліндегі нұсқасы.
program example2
include 'mpif.h‟
integer ierr, size, rank
real a, b
integer status(MPI_STATUS_SIZE)
call MPI_INIT(ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
a = 0.0
b = 0.0
if(rank .eq. 0) then
b = 1.0
call MPI_SEND(b, 1, MPI_REAL, 1, 5,
&
MPI_COMM_WORLD, ierr);
call MPI_RECV(a, 1, MPI_REAL, 1, 5,
&
MPI_COMM_WORLD, status, ierr);
else
if(rank .eq. 1) then
a = 2.0
call MPI_RECV(b, 1, MPI_REAL, 0, 5,
&
MPI_COMM_WORLD, status, ierr);
call MPI_SEND(a, 1, MPI_REAL, 0, 5,
&
MPI_COMM_WORLD, ierr);
end if
end if
print *, 'process ', rank,‟ a = ', a, ', b = ', b
call MPI_FINALIZE(ierr)
end
Мұнда да егер бағдарлама кӛп процестер санымен жіберілсе, онда
жіберулерді нақты тек нӛлінші және бірінші процестер ғана орындайды.
MPI_Init
функциясы орындалуынан туындаған қалған процестер
a және
b
айнымалыларының бастапқы
мәндерін баспаға беріп, одан кейін
MPI_Finalize функциясын орындап аяқталады
166
Келесі мысалда жұп нӛмірлі әрбір процесс нӛмірі бірге артық ӛз
кӛршілеріне хабарлама жібереді. Масималды нӛмірлі
процеске келесі жоқ
процеске хабарлама жібермеу үшін қосымша тексеру қойылған.
Бағдарламаның тӛменде сүлбесі ғана кӛрсетілген (Си тілінде).
main(int argc, char **argv)
{
int me, size;
int SOME_TAG=0;
MPI_Status status;
Достарыңызбен бөлісу: