ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
92
digit=1
print *,'I block send: ',digit
call MPI_SEND(digit, 1, MPI_INTEGER,0,0,
+ MPI_COMM_WORLD, ierror)
endif
call MPI_FINALIZE(ierror)
stop
end
Обмен между первым и нулевым процессами информацией.
Работа при любом количестве процессов.
С помощью неблокирующих операций обмена.
Реализация “С”
#include "mpi.h"
#include <stdio.h>
int main(int argc,char *argv[])
{
int myrank;//номер процесса
int size;//объем коммуникатора
char c;//Буковка для блокирующего обмена
int TAG = 0;
MPI_Status status;
MPI_Request req;
int flag=0;
/**
* Начало и завершение:
* MPI_Init, MPI_Finalize
* Определение количества задач в приложении и своего по-
рядкового
* номера:
* MPI_Comm_size, MPI_Comm_rank
*/
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
if(size<2)
{
printf("Error less than two process.\n");
MPI_Finalize();
exit(1);
}
if(myrank==0)
{
c='a';
printf("I'm %i non block send %c\n",myrank,c);
MPI_Isend(&c, 1, MPI_CHAR, 1, 11, MPI_COMM_WORLD, &req);
MPI_Wait(&req,&status); //Ждем окончания передачи
MPI_Test(&req,&flag,&status); //Проверяем дошло ли сооб-
щение
1...,84,85,86,87,88,89,90,91,92,93 95,96,97,98,99,100,101,102,103,104,...180