94 提供公平性(Fortran) |
作为一个替代
parameter( large = 128 )
integer requests(large);
integer statuses(MPI_STATUS_SIZE,large);
integer indices(large);
integer buf(large);
logical done
do 10 i = 1,size-1
10 call MPI_Irecv( buf(i), 1, MPI_INTEGER, i,
* MPI_ANY_TAG, MPI_COMM_WORLD, requests(i), ierr )
20 if (.not. done) then
call MPI_Waitsome( size-1, requests, ndone,
indices, statuses, ierr )
do 30 i=1, ndone
j = indices(i)
print *, 'Msg from ', statuses(MPI_SOURCE,i), ' with tag',
* statuses(MPI_TAG,i)
call MPI_Irecv( buf(j), 1, MPI_INTEGER, j,
MPI_ANY_TAG, MPI_COMM_WORLD, requests(j), ierr )
done = ...
30 continue
goto 20
endif
| Copyright: NPACT |