16 #define REAL_MPI_TYPE MPI_FLOAT
18 #define REAL_MPI_TYPE MPI_DOUBLE
26 integer,
parameter ::
dp = kind(1.0d0)
130 call mpi_comm_rank(mpi_comm_world,
myrank,
ierr)
131 call mpi_comm_size(mpi_comm_world,
nranks,
ierr)
133 call bml_initf(mpi_comm_world)
136 write(*,*)
"MPI started in progress, rank ",
myrank,
" out of ",
nranks,
" ranks"
161 call mpi_finalize(
ierr)
172 integer,
intent(in) :: irequest
177 if (
rused(i) == 0)
then
198 call mpi_barrier(mpi_comm_world,
ierr)
208 real(
dp),
intent(in) :: sendbuf(*)
209 real(
dp),
intent(out) :: recvbuf(*)
210 integer,
intent(in) :: sendlen, recvlen, dest, source
211 integer,
intent(out) :: nreceived
213 integer :: mstatus(mpi_status_size)
215 call mpi_sendrecv(sendbuf, sendlen, real_mpi_type, dest, 0, &
216 recvbuf, recvlen, real_mpi_type, source, 0, &
217 mpi_comm_world, mstatus,
ierr)
218 call mpi_get_count(mstatus, real_mpi_type, nreceived,
ierr)
220 recvbuf(1:sendlen) = sendbuf(1:sendlen)
231 real(
dp),
intent(in) :: sendbuf(*)
232 integer,
intent(in) :: sendlen, dest
236 call mpi_isend(sendbuf, sendlen, real_mpi_type, dest, &
237 0, mpi_comm_world, request,
ierr)
247 real(
dp),
intent(in) :: sendbuf(*)
248 integer,
intent(in) :: sendlen, dest
251 call mpi_send(sendbuf, sendlen, real_mpi_type, dest, &
252 0, mpi_comm_world,
ierr)
262 real(
dp) :: recvbuf(*)
263 integer,
intent(in) :: recvlen
268 call mpi_irecv(recvbuf, recvlen, real_mpi_type, mpi_any_source, &
269 0, mpi_comm_world, request,
ierr)
280 real(
dp) :: recvbuf(*)
281 integer,
intent(in) :: recvlen
283 integer :: mstatus(mpi_status_size)
285 call mpi_recv(recvbuf, recvlen, real_mpi_type, mpi_any_source, &
286 0, mpi_comm_world, mstatus,
ierr)
296 integer,
intent(in) :: sendbuf(*)
297 integer :: recvbuf(*)
298 integer,
intent(in) :: icount
302 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_int, &
303 mpi_sum, mpi_comm_world,
ierr)
306 recvbuf(i) = sendbuf(i)
317 real(
dp),
intent(in) :: sendbuf(*)
318 real(
dp),
intent(out) :: recvbuf(*)
319 integer,
intent(in) :: icount
323 call mpi_allreduce(sendbuf, recvbuf, icount, real_mpi_type, &
324 mpi_sum, mpi_comm_world,
ierr)
327 recvbuf(i) = sendbuf(i)
338 integer,
intent(in) :: sendbuf(*)
339 integer,
intent(out) :: recvbuf(*)
340 integer,
intent(in) :: icount
344 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_int, &
345 mpi_max, mpi_comm_world,
ierr)
348 recvbuf(i) = sendbuf(i)
359 real(
dp),
intent(in) :: sendbuf(*)
360 real(
dp),
intent(out) :: recvbuf(*)
361 integer,
intent(in) :: icount
365 call mpi_allreduce(sendbuf, recvbuf, icount, real_mpi_type, &
366 mpi_max, mpi_comm_world,
ierr)
369 recvbuf(i) = sendbuf(i)
380 integer,
intent(in) :: sendbuf(*)
381 integer,
intent(out) :: recvbuf(*)
382 integer,
intent(in) :: icount
386 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_int, &
387 mpi_min, mpi_comm_world,
ierr)
390 recvbuf(i) = sendbuf(i)
401 real(
dp),
intent(in) :: sendbuf(*)
402 real(
dp),
intent(out) :: recvbuf(*)
403 integer,
intent(in) :: icount
407 call mpi_allreduce(sendbuf, recvbuf, icount, real_mpi_type, &
408 mpi_min, mpi_comm_world,
ierr)
411 recvbuf(i) = sendbuf(i)
422 real(
dp),
intent(inout) :: rvalue
423 real(
dp) :: slocal(1),sglobal(1)
438 real(
dp),
intent(inout) :: rvalue
439 real(
dp) :: slocal(1), sglobal(1)
454 integer,
intent(inout) :: value1, value2
455 integer :: slocal(2), sglobal(2)
472 integer,
intent(inout) :: value1, value2
473 integer :: slocal(2), sglobal(2)
490 real(
dp),
intent(inout) :: value1
491 real(
dp):: slocal(1), sglobal(1)
506 real(
dp),
intent(inout) :: value1, value2
507 real(
dp):: slocal(2), sglobal(2)
524 real(
dp),
intent(inout) :: value1, value2, value3
525 real(
dp):: slocal(3), sglobal(3)
544 real(
dp),
intent(inout) :: valuevec(n)
545 integer,
intent(in) :: n
547 real(
dp),
allocatable :: sglobal(:)
565 integer,
intent(inout) :: valuevec(n)
566 integer,
intent(in) :: n
568 integer,
allocatable :: sglobal(:)
587 integer,
intent(in) :: icount
590 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_double_int, &
591 mpi_minloc, mpi_comm_world,
ierr)
596 recvbuf(i)%val = sendbuf(i)%val
597 recvbuf(i)%rank = sendbuf(i)%rank
610 integer,
intent(in) :: icount
613 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_double_int, &
614 mpi_maxloc, mpi_comm_world,
ierr)
619 recvbuf(i)%val = sendbuf(i)%val
620 recvbuf(i)%rank = sendbuf(i)%rank
631 character,
intent(in) :: buf(*)
632 integer,
intent(in) :: blen, root
635 call mpi_bcast(buf, blen, mpi_byte, root, mpi_comm_world,
ierr)
645 real(
dp),
intent(in) :: sendbuf(*)
646 real(
dp),
intent(out) :: recvbuf(*)
647 integer,
intent(in) :: sendlen, recvlen
650 call mpi_allgather(sendbuf, sendlen, real_mpi_type, recvbuf, recvlen, &
651 real_mpi_type, mpi_comm_world,
ierr)
661 integer,
intent(in) :: sendbuf(*)
662 integer,
intent(out) :: recvbuf(*)
663 integer,
intent(in) :: sendlen, recvlen
666 call mpi_allgather(sendbuf, sendlen, mpi_int, recvbuf, recvlen, &
667 mpi_int, mpi_comm_world,
ierr)
677 real(
dp),
intent(in) :: sendbuf(*)
678 real(
dp),
intent(out) :: recvbuf(*)
679 integer,
intent(in) :: sendlen
680 integer,
intent(in) :: recvlen(*)
681 integer,
intent(in) :: recvdispl(*)
684 call mpi_allgatherv(sendbuf, sendlen, real_mpi_type, recvbuf, &
685 recvlen, recvdispl, real_mpi_type, &
686 mpi_comm_world,
ierr)
697 integer,
intent(in) :: sendbuf(*)
698 integer,
intent(out) :: recvbuf(*)
699 integer,
intent(in) :: sendlen
700 integer,
intent(in) :: recvlen(*)
701 integer,
intent(in) :: recvdispl(*)
704 call mpi_allgatherv(sendbuf, sendlen, mpi_int, recvbuf, recvlen, &
705 recvdispl, mpi_int, mpi_comm_world,
ierr)
715 real(
dp),
intent(inout) :: buf(*)
716 integer,
intent(in) :: buflen
719 call mpi_allreduce(mpi_in_place, buf, buflen, real_mpi_type, &
720 mpi_sum, mpi_comm_world,
ierr)
730 integer,
intent(inout) :: buf(*)
731 integer,
intent(in) :: buflen
734 call mpi_allreduce(mpi_in_place, buf, buflen, mpi_int, &
735 mpi_sum, mpi_comm_world,
ierr)
745 type (bml_matrix_t),
intent(inout) :: a
748 call bml_allgathervparallel(a)
760 integer :: request,
ierr
subroutine, public prg_iprg_recvparallel(recvBuf, recvLen, rind)
subroutine, public minintparallel(sendBuf, recvBuf, icount)
subroutine, public maxrankrealparallel(sendBuf, recvBuf, icount)
subroutine, public prg_barrierparallel()
integer, dimension(:), allocatable requestlist
subroutine, public prg_maxintreduce2(value1, value2)
integer function saverequest(irequest)
subroutine, public prg_sumrealreduce3(value1, value2, value3)
subroutine, public minrankrealparallel(sendBuf, recvBuf, icount)
subroutine, public sumrealparallel(sendBuf, recvBuf, icount)
subroutine, public prg_sumrealreduce(value1)
subroutine, public prg_sumrealreducen(valueVec, N)
subroutine, public allgatherrealparallel(sendBuf, sendLen, recvBuf, recvLen)
subroutine, public allgatherintparallel(sendBuf, sendLen, recvBuf, recvLen)
subroutine, public prg_maxrealreduce(rvalue)
subroutine, public sendparallel(sendBuf, sendLen, dest)
subroutine, public prg_shutdownparallel()
subroutine, public allgathervrealparallel(sendBuf, sendLen, recvBuf, recvLen, recvDispl)
subroutine, public isendparallel(sendBuf, sendLen, dest)
subroutine, public prg_allgatherparallel(a)
subroutine, public prg_bcastparallel(buf, blen, root)
integer function, public printrank()
subroutine, public maxrealparallel(sendBuf, recvBuf, icount)
subroutine, public prg_sumintreduce2(value1, value2)
subroutine, public sendreceiveparallel(sendBuf, sendLen, dest, recvBuf, recvLen, source, nreceived)
subroutine, public allgathervintparallel(sendBuf, sendLen, recvBuf, recvLen, recvDispl)
subroutine, public prg_initparallel()
subroutine, public maxintparallel(sendBuf, recvBuf, icount)
subroutine, public prg_allsumrealreduceparallel(buf, buflen)
subroutine, public prg_allsumintreduceparallel(buf, buflen)
subroutine, public prg_sumintreducen(valueVec, N)
integer function, public getnranks()
subroutine, public minrealparallel(sendBuf, recvBuf, icount)
subroutine, public prg_minrealreduce(rvalue)
subroutine, public prg_recvparallel(recvBuf, recvLen)
integer, dimension(:), allocatable rused
integer function, public getmyrank()
subroutine, public prg_wait()
subroutine, public sumintparallel(sendBuf, recvBuf, icount)
subroutine, public prg_sumrealreduce2(value1, value2)
Data structure for rection over MPI ranks.