
parallel / 4-2010
.pdf" #$
,
, ,
. . 4
,
.
"
.
" 4
, (,
. , , ,
.
2008
" #$
,
MPI_Send_init:
int MPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
MPI_Send_init(buf, count, datatype, dest, tag, comm, request, ierr)
2008
" #$
" (
. . MPI_Bsend_init,
MPI_Ssend_init MPI_Rsend_init.
" MPI_Start:
int MPI_Start(MPI_Request *request)
MPI_Start(request, ierr)
2008
" #$
! MPI_Startall:
int MPI_Startall(int count, MPI_request *requests)
MPI_Startall(count, requests, ierr)
,
requests.
,$ MPI_Wait, MPI_Test
.
2008
! #
. :
;
;
MPI;
- ;
.
2008
!
$ . :
parallel-g112@yandex.ru
2008
!
2
. ,
.
2008
home_task.cpp
#include "mpi.h" #include <stdio.h>
int main(int argc,char *argv[])
{
int myid, numprocs, **buf, source, i; int message[3] = {0, 1, 2};
int myrank, data = 2002, count, TAG = 0; MPI_Status status;
MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); if (myrank == 0)
{
MPI_Send(&data, 1, MPI_INT, 2, TAG, MPI_COMM_WORLD);
}
else if (myrank == 1) {
MPI_Send(&message, 3, MPI_INT, 2, TAG, MPI_COMM_WORLD);
}
…
2008
else
{
MPI_Probe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); source = status.MPI_SOURCE;
MPI_Get_count(&status, MPI_INT, &count); for (i = 0; i < count; i++){
buf[i] = (int *)malloc(count*sizeof(int));
}
MPI_Recv(&buf[0], count, MPI_INT, source, TAG, MPI_COMM_WORLD, &status);
for (i = 0; i < count; i++){ printf("received: %d\n", buf[i]);
}
}
MPI_Finalize(); return 0;
}
2008

' #$
( " MPI