ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
89
/**
* Каждая задача выводит пользователю свой номер
*/
printf("Hello! My rank in MPI_COMM_WORLD = %d\n", rank );
/**
* Точка синхронизации, затем задача 0 печатает размер груп-
пы,
* к которой прикреплен описатель (коммуникатор)
MPI_COMM_WORLD,
* т.е. число процессов в приложении
*/
MPI_Barrier( MPI_COMM_WORLD );
if( rank==0 )
printf("Total processes count = %d\n", size );
/**
* Все задачи завершают выполнение
*/
MPI_Finalize();
return 0;
}
Реализация “Fortran77”
include 'mpif.h'
c Номер процесса
integer myrank
c Номер последнего процесса
integer nproc
c Объем коммуникатора
integer size
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)
if (myrank .eq. 0) then
call MPI_SEND(myrank, 1, MPI_INTEGER,1,0,
+ MPI_COMM_WORLD, ierror)
print *,'MyNumber: ',myrank
call MPI_RECV(nproc,1, MPI_INTEGER,size-1,0,
+ MPI_COMM_WORLD, status, ierror)
if(nproc .eq. size-1) then
print *,'MyNumber: ',myrank
print *,' Number of processes:',nproc+1
print *,'Successfuly!'
else
print *,'Bad process number :-(.',nproc,'recived,'
print *,'but I wait for:',size-1
endif
else
c Получаем сообщение от предыдущего процесса, что он напечатал
call MPI_RECV(nproc,1, MPI_INTEGER,myrank-1,0,