16 #define REAL_MPI_TYPE MPI_FLOAT
18 #define REAL_MPI_TYPE MPI_DOUBLE
26 integer,
parameter ::
dp = kind(1.0d0)
132 call mpi_comm_rank(mpi_comm_world,
myrank,
ierr)
133 call mpi_comm_size(mpi_comm_world,
nranks,
ierr)
135 call bml_initf(mpi_comm_world)
138 write(*,*)
"MPI started in progress, rank ",
myrank,
" out of ",
nranks,
" ranks"
163 call mpi_finalize(
ierr)
174 integer,
intent(in) :: irequest
179 if (
rused(i) == 0)
then
200 call mpi_barrier(mpi_comm_world,
ierr)
210 real(
dp),
intent(in) :: sendbuf(*)
211 real(
dp),
intent(out) :: recvbuf(*)
212 integer,
intent(in) :: sendlen, recvlen, dest, source
213 integer,
intent(out) :: nreceived
215 integer :: mstatus(mpi_status_size)
217 call mpi_sendrecv(sendbuf, sendlen, real_mpi_type, dest, 0, &
218 recvbuf, recvlen, real_mpi_type, source, 0, &
219 mpi_comm_world, mstatus,
ierr)
220 call mpi_get_count(mstatus, real_mpi_type, nreceived,
ierr)
222 recvbuf(1:sendlen) = sendbuf(1:sendlen)
233 real(
dp),
intent(in) :: sendbuf(*)
234 integer,
intent(in) :: sendlen, dest
238 call mpi_isend(sendbuf, sendlen, real_mpi_type, dest, &
239 0, mpi_comm_world, request,
ierr)
249 real(
dp),
intent(in) :: sendbuf(*)
250 integer,
intent(in) :: sendlen, dest
253 call mpi_send(sendbuf, sendlen, real_mpi_type, dest, &
254 0, mpi_comm_world,
ierr)
264 real(
dp) :: recvbuf(*)
265 integer,
intent(in) :: recvlen
270 call mpi_irecv(recvbuf, recvlen, real_mpi_type, mpi_any_source, &
271 0, mpi_comm_world, request,
ierr)
282 real(
dp) :: recvbuf(*)
283 integer,
intent(in) :: recvlen
285 integer :: mstatus(mpi_status_size)
287 call mpi_recv(recvbuf, recvlen, real_mpi_type, mpi_any_source, &
288 0, mpi_comm_world, mstatus,
ierr)
298 integer,
intent(in) :: sendbuf(*)
299 integer :: recvbuf(*)
300 integer,
intent(in) :: icount
304 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_int, &
305 mpi_sum, mpi_comm_world,
ierr)
308 recvbuf(i) = sendbuf(i)
319 real(
dp),
intent(in) :: sendbuf(*)
320 real(
dp),
intent(out) :: recvbuf(*)
321 integer,
intent(in) :: icount
325 call mpi_allreduce(sendbuf, recvbuf, icount, real_mpi_type, &
326 mpi_sum, mpi_comm_world,
ierr)
329 recvbuf(i) = sendbuf(i)
340 integer,
intent(in) :: sendbuf(*)
341 integer,
intent(out) :: recvbuf(*)
342 integer,
intent(in) :: icount
346 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_int, &
347 mpi_max, mpi_comm_world,
ierr)
350 recvbuf(i) = sendbuf(i)
361 real(
dp),
intent(in) :: sendbuf(*)
362 real(
dp),
intent(out) :: recvbuf(*)
363 integer,
intent(in) :: icount
367 call mpi_allreduce(sendbuf, recvbuf, icount, real_mpi_type, &
368 mpi_max, mpi_comm_world,
ierr)
371 recvbuf(i) = sendbuf(i)
382 integer,
intent(in) :: sendbuf(*)
383 integer,
intent(out) :: recvbuf(*)
384 integer,
intent(in) :: icount
388 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_int, &
389 mpi_min, mpi_comm_world,
ierr)
392 recvbuf(i) = sendbuf(i)
403 real(
dp),
intent(in) :: sendbuf(*)
404 real(
dp),
intent(out) :: recvbuf(*)
405 integer,
intent(in) :: icount
409 call mpi_allreduce(sendbuf, recvbuf, icount, real_mpi_type, &
410 mpi_min, mpi_comm_world,
ierr)
413 recvbuf(i) = sendbuf(i)
424 real(
dp),
intent(inout) :: rvalue
425 real(
dp) :: slocal(1),sglobal(1)
440 real(
dp),
intent(inout) :: rvalue
441 real(
dp) :: slocal(1), sglobal(1)
456 integer,
intent(inout) :: value1, value2
457 integer :: slocal(2), sglobal(2)
474 integer,
intent(inout) :: value1, value2
475 integer :: slocal(2), sglobal(2)
492 real(
dp),
intent(inout) :: value1
493 real(
dp):: slocal(1), sglobal(1)
508 real(
dp),
intent(inout) :: value1, value2
509 real(
dp):: slocal(2), sglobal(2)
526 real(
dp),
intent(inout) :: value1, value2, value3
527 real(
dp):: slocal(3), sglobal(3)
546 real(
dp),
intent(inout) :: valuevec(n)
547 integer,
intent(in) :: n
549 real(
dp),
allocatable :: sglobal(:)
567 integer,
intent(inout) :: valuevec(n)
568 integer,
intent(in) :: n
570 integer,
allocatable :: sglobal(:)
589 integer,
intent(in) :: icount
592 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_double_int, &
593 mpi_minloc, mpi_comm_world,
ierr)
598 recvbuf(i)%val = sendbuf(i)%val
599 recvbuf(i)%rank = sendbuf(i)%rank
612 integer,
intent(in) :: icount
615 call mpi_allreduce(sendbuf, recvbuf, icount, mpi_double_int, &
616 mpi_maxloc, mpi_comm_world,
ierr)
621 recvbuf(i)%val = sendbuf(i)%val
622 recvbuf(i)%rank = sendbuf(i)%rank
633 character,
intent(inout) :: buf(*)
634 integer,
intent(in) :: blen, root
637 call mpi_bcast(buf, blen, mpi_byte, root, mpi_comm_world,
ierr)
647 real(
dp),
intent(inout) :: buf(*)
648 integer,
intent(in) :: blen, root
651 call mpi_bcast(buf, blen, real_mpi_type, root, mpi_comm_world,
ierr)
661 integer,
intent(inout) :: buf(*)
662 integer,
intent(in) :: blen, root
665 call mpi_bcast(buf, blen, mpi_int, root, mpi_comm_world,
ierr)
675 real(
dp),
intent(in) :: sendbuf(*)
676 real(
dp),
intent(out) :: recvbuf(*)
677 integer,
intent(in) :: sendlen, recvlen
680 call mpi_allgather(sendbuf, sendlen, real_mpi_type, recvbuf, recvlen, &
681 real_mpi_type, mpi_comm_world,
ierr)
691 integer,
intent(in) :: sendbuf(*)
692 integer,
intent(out) :: recvbuf(*)
693 integer,
intent(in) :: sendlen, recvlen
696 call mpi_allgather(sendbuf, sendlen, mpi_int, recvbuf, recvlen, &
697 mpi_int, mpi_comm_world,
ierr)
707 real(
dp),
intent(in) :: sendbuf(*)
708 real(
dp),
intent(out) :: recvbuf(*)
709 integer,
intent(in) :: sendlen
710 integer,
intent(in) :: recvlen(*)
711 integer,
intent(in) :: recvdispl(*)
714 call mpi_allgatherv(sendbuf, sendlen, real_mpi_type, recvbuf, &
715 recvlen, recvdispl, real_mpi_type, &
716 mpi_comm_world,
ierr)
727 integer,
intent(in) :: sendbuf(*)
728 integer,
intent(out) :: recvbuf(*)
729 integer,
intent(in) :: sendlen
730 integer,
intent(in) :: recvlen(*)
731 integer,
intent(in) :: recvdispl(*)
734 call mpi_allgatherv(sendbuf, sendlen, mpi_int, recvbuf, recvlen, &
735 recvdispl, mpi_int, mpi_comm_world,
ierr)
745 real(
dp),
intent(inout) :: buf(*)
746 integer,
intent(in) :: buflen
749 call mpi_allreduce(mpi_in_place, buf, buflen, real_mpi_type, &
750 mpi_sum, mpi_comm_world,
ierr)
760 integer,
intent(inout) :: buf(*)
761 integer,
intent(in) :: buflen
764 call mpi_allreduce(mpi_in_place, buf, buflen, mpi_int, &
765 mpi_sum, mpi_comm_world,
ierr)
775 type (bml_matrix_t),
intent(inout) :: a
778 call bml_allgathervparallel(a)
790 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_bcastintparallel(buf, blen, root)
subroutine, public prg_sumintreduce2(value1, value2)
subroutine, public sendreceiveparallel(sendBuf, sendLen, dest, recvBuf, recvLen, source, nreceived)
subroutine, public prg_bcastrealparallel(buf, blen, root)
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.