WAIT
,
MPI
_
TEST
процедураларының кӛмегімен анықтауға болады.
Кезкелген MPI_SEND, MPI_ISEND процедураларымен жіберілген
хабарлама кезкелген MPI_RECV және MPI_IRECV процедураларымен
қабылдана алады.
Тӛменде сақина топологиясына сәйкес, барлық процестері жақын
кӛршілерімен хабарлама алмасатын бағдарлама мысалы келтірілген.
#include "mpi.h"
#include
int main(argc,argv)
int argc;
char *argv[]; {
int numtasks, rank, next, prev, buf[2], tagl=l, tag2=2;
MPI_Request reqs[4];
MPI_Status stats [4];
MPI_Init (&argc, &argv) ;
172
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
prev = rank - 1;
next = rank+1;
if (rank == 0) prev = numtasks - 1;
if (rank == (numtasks - 1)) next = 0;
MPI_Irecv(&buf[0], 1, MPI_INT, prev, tagl, MPI_COMM_WORLD,
&reqs[0]);
MPI_Irecv(&buf[1],
1,
MPI_INT,
next,
tag2,
MPI_COMM_WORLD, &reqs[1]);
MPI_Isend(&rank,
1,
MPI_INT,
prev,
tag2,
MPI_COMM_WORLD,
&reqs[2]);
MPI_Isend(&rank,
1,
MPI_INT, next, tagl, MPI_COMM_WORLD, &reqs[3]);
MPI_Waitall(4, reqs, stats);
MPI_Finalize();
}
Фортран тіліндегі нұсқасы:
program example5
include 'mpif.h
‟
integer ierr, rank, size, prev, next, reqs(4), buf(2)
integer stats(MPI_STATUS_SIZE, 4)
Достарыңызбен бөлісу: |