== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
! -*- fortran -*-
|
|
|
|
!
|
|
|
|
! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
|
|
|
|
! Copyright (c) 2007 Los Alamos National Security, LLC. All rights
|
|
|
|
! reserved.
|
2012-08-08 17:17:57 +04:00
|
|
|
! Copyright (c) 2012 The University of Tennessee and The University
|
|
|
|
! of Tennessee Research Foundation. All rights
|
|
|
|
! reserved.
|
|
|
|
! Copyright (c) 2012 Inria. All rights reserved.
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
! $COPYRIGHT$
|
|
|
|
!
|
|
|
|
! Additional copyrights may follow
|
|
|
|
!
|
|
|
|
! $HEADER$
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Abort
|
|
|
|
|
|
|
|
subroutine MPI_Abort(comm, errorcode, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: errorcode
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Abort
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Accumulate
|
|
|
|
|
|
|
|
subroutine MPI_Accumulate(origin_addr, origin_count, origin_datatype, target_rank, target_disp, &
|
|
|
|
target_count, target_datatype, op, win, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ origin_addr
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: origin_addr
|
|
|
|
integer, intent(in) :: origin_count
|
|
|
|
integer, intent(in) :: origin_datatype
|
|
|
|
integer, intent(in) :: target_rank
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
|
|
|
|
integer, intent(in) :: target_count
|
|
|
|
integer, intent(in) :: target_datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Accumulate
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Add_error_class
|
|
|
|
|
|
|
|
subroutine MPI_Add_error_class(errorclass, ierr)
|
|
|
|
integer, intent(out) :: errorclass
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Add_error_class
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Add_error_code
|
|
|
|
|
|
|
|
subroutine MPI_Add_error_code(errorclass, errorcode, ierr)
|
|
|
|
integer, intent(in) :: errorclass
|
|
|
|
integer, intent(out) :: errorcode
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Add_error_code
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Add_error_string
|
|
|
|
|
|
|
|
subroutine MPI_Add_error_string(errorcode, string, ierr)
|
|
|
|
integer, intent(in) :: errorcode
|
|
|
|
character(len=*), intent(in) :: string
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Add_error_string
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Address
|
|
|
|
|
|
|
|
subroutine MPI_Address(location, address, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ location
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: location
|
|
|
|
integer, intent(out) :: address
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Address
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Allgather
|
|
|
|
|
|
|
|
subroutine MPI_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Allgather
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Allgatherv
|
|
|
|
|
|
|
|
subroutine MPI_Allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
|
|
|
|
displs, recvtype, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: displs
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Allgatherv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Alloc_mem
|
|
|
|
|
|
|
|
subroutine MPI_Alloc_mem(size, info, baseptr, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: size
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: baseptr
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Alloc_mem
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Allreduce
|
|
|
|
|
|
|
|
subroutine MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Allreduce
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Alltoall
|
|
|
|
|
|
|
|
subroutine MPI_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Alltoall
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Alltoallv
|
|
|
|
|
|
|
|
subroutine MPI_Alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, &
|
|
|
|
recvcounts, rdispls, recvtype, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, dimension(*), intent(in) :: sendcounts
|
|
|
|
integer, dimension(*), intent(in) :: sdispls
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: rdispls
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Alltoallv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Alltoallw
|
|
|
|
|
|
|
|
subroutine MPI_Alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, &
|
|
|
|
recvcounts, rdispls, recvtypes, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, dimension(*), intent(in) :: sendcounts
|
|
|
|
integer, dimension(*), intent(in) :: sdispls
|
|
|
|
integer, dimension(*), intent(in) :: sendtypes
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: rdispls
|
|
|
|
integer, dimension(*), intent(in) :: recvtypes
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Alltoallw
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Attr_delete
|
|
|
|
|
|
|
|
subroutine MPI_Attr_delete(comm, keyval, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Attr_delete
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Attr_get
|
|
|
|
|
|
|
|
subroutine MPI_Attr_get(comm, keyval, attribute_val, flag, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: keyval
|
|
|
|
integer, intent(out) :: attribute_val
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Attr_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Attr_put
|
|
|
|
|
|
|
|
subroutine MPI_Attr_put(comm, keyval, attribute_val, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: keyval
|
|
|
|
integer, intent(in) :: attribute_val
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Attr_put
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Barrier
|
|
|
|
|
|
|
|
subroutine MPI_Barrier(comm, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Barrier
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Bcast
|
|
|
|
|
|
|
|
subroutine MPI_Bcast(buffer, count, datatype, root, comm&
|
|
|
|
, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buffer
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Bcast
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Bsend
|
|
|
|
|
|
|
|
subroutine MPI_Bsend(buf, count, datatype, dest, tag, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Bsend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Bsend_init
|
|
|
|
|
|
|
|
subroutine MPI_Bsend_init(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Bsend_init
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Buffer_attach
|
|
|
|
|
|
|
|
subroutine MPI_Buffer_attach(buffer, size, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buffer
|
|
|
|
integer, intent(in) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Buffer_attach
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Buffer_detach
|
|
|
|
|
|
|
|
subroutine MPI_Buffer_detach(buffer, size, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buffer
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Buffer_detach
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cancel
|
|
|
|
|
|
|
|
subroutine MPI_Cancel(request, ierr)
|
|
|
|
integer, intent(in) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cancel
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_coords
|
|
|
|
|
|
|
|
subroutine MPI_Cart_coords(comm, rank, maxdims, coords, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: rank
|
|
|
|
integer, intent(in) :: maxdims
|
|
|
|
integer, dimension(*), intent(out) :: coords
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_coords
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_create
|
|
|
|
|
|
|
|
subroutine MPI_Cart_create(old_comm, ndims, dims, periods, reorder, &
|
|
|
|
comm_cart, ierr)
|
|
|
|
integer, intent(in) :: old_comm
|
|
|
|
integer, intent(in) :: ndims
|
|
|
|
integer, dimension(*), intent(in) :: dims
|
|
|
|
logical, dimension(*), intent(in) :: periods
|
|
|
|
logical, intent(in) :: reorder
|
|
|
|
integer, intent(out) :: comm_cart
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_get
|
|
|
|
|
|
|
|
subroutine MPI_Cart_get(comm, maxdims, dims, periods, coords&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: maxdims
|
|
|
|
integer, dimension(*), intent(out) :: dims
|
|
|
|
logical, dimension(*), intent(out) :: periods
|
|
|
|
integer, dimension(*), intent(out) :: coords
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_map
|
|
|
|
|
|
|
|
subroutine MPI_Cart_map(comm, ndims, dims, periods, newrank&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: ndims
|
|
|
|
integer, dimension(*), intent(in) :: dims
|
|
|
|
logical, dimension(*), intent(in) :: periods
|
|
|
|
integer, intent(out) :: newrank
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_map
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_rank
|
|
|
|
|
|
|
|
subroutine MPI_Cart_rank(comm, coords, rank, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, dimension(*), intent(in) :: coords
|
|
|
|
integer, intent(out) :: rank
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_rank
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_shift
|
|
|
|
|
|
|
|
subroutine MPI_Cart_shift(comm, direction, disp, rank_source, rank_dest&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: direction
|
|
|
|
integer, intent(in) :: disp
|
|
|
|
integer, intent(out) :: rank_source
|
|
|
|
integer, intent(out) :: rank_dest
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_shift
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cart_sub
|
|
|
|
|
|
|
|
subroutine MPI_Cart_sub(comm, remain_dims, new_comm, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
logical, dimension(*), intent(in) :: remain_dims
|
|
|
|
integer, intent(out) :: new_comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cart_sub
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Cartdim_get
|
|
|
|
|
|
|
|
subroutine MPI_Cartdim_get(comm, ndims, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ndims
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Cartdim_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Close_port
|
|
|
|
|
|
|
|
subroutine MPI_Close_port(port_name, ierr)
|
|
|
|
character(len=*), intent(in) :: port_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Close_port
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_accept
|
|
|
|
|
|
|
|
subroutine MPI_Comm_accept(port_name, info, root, comm, newcomm&
|
|
|
|
, ierr)
|
|
|
|
character(len=*), intent(in) :: port_name
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: newcomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_accept
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_call_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Comm_call_errhandler(comm, errorcode, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: errorcode
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_call_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_compare
|
|
|
|
|
|
|
|
subroutine MPI_Comm_compare(comm1, comm2, result, ierr)
|
|
|
|
integer, intent(in) :: comm1
|
|
|
|
integer, intent(in) :: comm2
|
|
|
|
integer, intent(out) :: result
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_compare
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_connect
|
|
|
|
|
|
|
|
subroutine MPI_Comm_connect(port_name, info, root, comm, newcomm&
|
|
|
|
, ierr)
|
|
|
|
character(len=*), intent(in) :: port_name
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: newcomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_connect
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_create
|
|
|
|
|
|
|
|
subroutine MPI_Comm_create(comm, group, newcomm, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(out) :: newcomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_create_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Comm_create_errhandler(function, errhandler, ierr)
|
|
|
|
external :: function
|
|
|
|
integer, intent(out) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_create_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_create_keyval
|
|
|
|
|
|
|
|
subroutine MPI_Comm_create_keyval(comm_copy_attr_fn, comm_delete_attr_fn, comm_keyval, extra_state, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
external :: comm_copy_attr_fn
|
|
|
|
external :: comm_delete_attr_fn
|
|
|
|
integer, intent(out) :: comm_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_create_keyval
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_delete_attr
|
|
|
|
|
|
|
|
subroutine MPI_Comm_delete_attr(comm, comm_keyval, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: comm_keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_delete_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_disconnect
|
|
|
|
|
|
|
|
subroutine MPI_Comm_disconnect(comm, ierr)
|
|
|
|
integer, intent(inout) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_disconnect
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_dup
|
|
|
|
|
|
|
|
subroutine MPI_Comm_dup(comm, newcomm, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: newcomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_dup
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_free
|
|
|
|
|
|
|
|
subroutine MPI_Comm_free(comm, ierr)
|
|
|
|
integer, intent(inout) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_free_keyval
|
|
|
|
|
|
|
|
subroutine MPI_Comm_free_keyval(comm_keyval, ierr)
|
|
|
|
integer, intent(inout) :: comm_keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_free_keyval
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_get_attr
|
|
|
|
|
|
|
|
subroutine MPI_Comm_get_attr(comm, comm_keyval, attribute_val, flag, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: comm_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: attribute_val
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_get_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_get_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Comm_get_errhandler(comm, erhandler, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: erhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_get_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_get_name
|
|
|
|
|
|
|
|
subroutine MPI_Comm_get_name(comm, comm_name, resultlen, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
character(len=*), intent(out) :: comm_name
|
|
|
|
integer, intent(out) :: resultlen
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_get_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_get_parent
|
|
|
|
|
|
|
|
subroutine MPI_Comm_get_parent(parent, ierr)
|
|
|
|
integer, intent(out) :: parent
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_get_parent
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_group
|
|
|
|
|
|
|
|
subroutine MPI_Comm_group(comm, group, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: group
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_group
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_join
|
|
|
|
|
|
|
|
subroutine MPI_Comm_join(fd, intercomm, ierr)
|
|
|
|
integer, intent(in) :: fd
|
|
|
|
integer, intent(out) :: intercomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_join
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_rank
|
|
|
|
|
|
|
|
subroutine MPI_Comm_rank(comm, rank, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: rank
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_rank
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_remote_group
|
|
|
|
|
|
|
|
subroutine MPI_Comm_remote_group(comm, group, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: group
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_remote_group
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_remote_size
|
|
|
|
|
|
|
|
subroutine MPI_Comm_remote_size(comm, size, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_remote_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_set_attr
|
|
|
|
|
|
|
|
subroutine MPI_Comm_set_attr(comm, comm_keyval, attribute_val, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: comm_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: attribute_val
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_set_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_set_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Comm_set_errhandler(comm, errhandler, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_set_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_set_name
|
|
|
|
|
|
|
|
subroutine MPI_Comm_set_name(comm, comm_name, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
character(len=*), intent(in) :: comm_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_set_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_size
|
|
|
|
|
|
|
|
subroutine MPI_Comm_size(comm, size, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_spawn
|
|
|
|
|
|
|
|
subroutine MPI_Comm_spawn(command, argv, maxprocs, info, root, &
|
|
|
|
comm, intercomm, array_of_errcodes, ierr)
|
|
|
|
character(len=*), intent(in) :: command
|
|
|
|
character(len=*), dimension(*), intent(in) :: argv
|
|
|
|
integer, intent(in) :: maxprocs
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: intercomm
|
|
|
|
integer, dimension(*), intent(out) :: array_of_errcodes
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_spawn
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_spawn_multiple
|
|
|
|
|
|
|
|
subroutine MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, &
|
|
|
|
root, comm, intercomm, array_of_errcodes, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
character(len=*), dimension(*), intent(in) :: array_of_commands
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
character(len=*), dimension(count, *), intent(in) :: array_of_argv
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
integer, dimension(*), intent(in) :: array_of_maxprocs
|
|
|
|
integer, dimension(*), intent(in) :: array_of_info
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: intercomm
|
|
|
|
integer, dimension(*), intent(out) :: array_of_errcodes
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_spawn_multiple
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_split
|
|
|
|
|
|
|
|
subroutine MPI_Comm_split(comm, color, key, newcomm, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: color
|
|
|
|
integer, intent(in) :: key
|
|
|
|
integer, intent(out) :: newcomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_split
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_split
|
|
|
|
|
|
|
|
subroutine MPI_Comm_split_type(comm, split_type, key, info, newcomm, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: split_type
|
|
|
|
integer, intent(in) :: key
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(out) :: newcomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_split_type
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Comm_test_inter
|
|
|
|
|
|
|
|
subroutine MPI_Comm_test_inter(comm, flag, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Comm_test_inter
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Dims_create
|
|
|
|
|
|
|
|
subroutine MPI_Dims_create(nnodes, ndims, dims, ierr)
|
|
|
|
integer, intent(in) :: nnodes
|
|
|
|
integer, intent(in) :: ndims
|
|
|
|
integer, dimension(*), intent(inout) :: dims
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Dims_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Errhandler_create
|
|
|
|
|
|
|
|
subroutine MPI_Errhandler_create(function, errhandler, ierr)
|
|
|
|
external :: function
|
|
|
|
integer, intent(out) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Errhandler_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Errhandler_free
|
|
|
|
|
|
|
|
subroutine MPI_Errhandler_free(errhandler, ierr)
|
|
|
|
integer, intent(inout) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Errhandler_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Errhandler_get
|
|
|
|
|
|
|
|
subroutine MPI_Errhandler_get(comm, errhandler, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Errhandler_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Errhandler_set
|
|
|
|
|
|
|
|
subroutine MPI_Errhandler_set(comm, errhandler, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Errhandler_set
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Error_class
|
|
|
|
|
|
|
|
subroutine MPI_Error_class(errorcode, errorclass, ierr)
|
|
|
|
integer, intent(in) :: errorcode
|
|
|
|
integer, intent(out) :: errorclass
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Error_class
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Error_string
|
|
|
|
|
|
|
|
subroutine MPI_Error_string(errorcode, string, resultlen, ierr)
|
|
|
|
integer, intent(in) :: errorcode
|
|
|
|
character(len=*), intent(out) :: string
|
|
|
|
integer, intent(out) :: resultlen
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Error_string
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Exscan
|
|
|
|
|
|
|
|
subroutine MPI_Exscan(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Exscan
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Finalize
|
|
|
|
|
|
|
|
subroutine MPI_Finalize(ierr)
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Finalize
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Finalized
|
|
|
|
|
|
|
|
subroutine MPI_Finalized(flag, ierr)
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Finalized
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Free_mem
|
|
|
|
|
|
|
|
subroutine MPI_Free_mem(base, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ base
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: base
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Free_mem
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Gather
|
|
|
|
|
|
|
|
subroutine MPI_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, root, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Gather
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Gatherv
|
|
|
|
|
|
|
|
subroutine MPI_Gatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
|
|
|
|
displs, recvtype, root, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: displs
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Gatherv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get
|
|
|
|
|
|
|
|
subroutine MPI_Get(origin_addr, origin_count, origin_datatype, target_rank, target_disp, &
|
|
|
|
target_count, target_datatype, win, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ origin_addr
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: origin_addr
|
|
|
|
integer, intent(in) :: origin_count
|
|
|
|
integer, intent(in) :: origin_datatype
|
|
|
|
integer, intent(in) :: target_rank
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
|
|
|
|
integer, intent(in) :: target_count
|
|
|
|
integer, intent(in) :: target_datatype
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get_address
|
|
|
|
|
|
|
|
subroutine MPI_Get_address(location, address, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ location
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: location
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: address
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get_address
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get_count
|
|
|
|
|
|
|
|
subroutine MPI_Get_count(status, datatype, count, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(in) :: status
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(out) :: count
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get_count
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get_elements
|
|
|
|
|
|
|
|
subroutine MPI_Get_elements(status, datatype, count, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(in) :: status
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(out) :: count
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get_elements
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get_library_version
|
|
|
|
|
|
|
|
subroutine MPI_Get_library_version(version, resultlen, ierr)
|
|
|
|
character(len=*), intent(out) :: version
|
|
|
|
integer, intent(out) :: resultlen
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get_library_version
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get_processor_name
|
|
|
|
|
|
|
|
subroutine MPI_Get_processor_name(name, resultlen, ierr)
|
|
|
|
character(len=*), intent(out) :: name
|
|
|
|
integer, intent(out) :: resultlen
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get_processor_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Get_version
|
|
|
|
|
|
|
|
subroutine MPI_Get_version(version, subversion, ierr)
|
|
|
|
integer, intent(out) :: version
|
|
|
|
integer, intent(out) :: subversion
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Get_version
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Graph_create
|
|
|
|
|
|
|
|
subroutine MPI_Graph_create(comm_old, nnodes, index, edges, reorder, &
|
|
|
|
comm_graph, ierr)
|
|
|
|
integer, intent(in) :: comm_old
|
|
|
|
integer, intent(in) :: nnodes
|
|
|
|
integer, dimension(*), intent(in) :: index
|
|
|
|
integer, dimension(*), intent(in) :: edges
|
|
|
|
logical, intent(in) :: reorder
|
|
|
|
integer, intent(out) :: comm_graph
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Graph_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Graph_get
|
|
|
|
|
|
|
|
subroutine MPI_Graph_get(comm, maxindex, maxedges, index, edges&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: maxindex
|
|
|
|
integer, intent(in) :: maxedges
|
|
|
|
integer, dimension(*), intent(out) :: index
|
|
|
|
integer, dimension(*), intent(out) :: edges
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Graph_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Graph_map
|
|
|
|
|
|
|
|
subroutine MPI_Graph_map(comm, nnodes, index, edges, newrank&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: nnodes
|
|
|
|
integer, dimension(*), intent(in) :: index
|
|
|
|
integer, dimension(*), intent(in) :: edges
|
|
|
|
integer, intent(out) :: newrank
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Graph_map
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Graph_neighbors
|
|
|
|
|
|
|
|
subroutine MPI_Graph_neighbors(comm, rank, maxneighbors, neighbors, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: rank
|
|
|
|
integer, intent(in) :: maxneighbors
|
|
|
|
integer, dimension(*), intent(out) :: neighbors
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Graph_neighbors
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Graph_neighbors_count
|
|
|
|
|
|
|
|
subroutine MPI_Graph_neighbors_count(comm, rank, nneighbors, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(in) :: rank
|
|
|
|
integer, intent(out) :: nneighbors
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Graph_neighbors_count
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Graphdims_get
|
|
|
|
|
|
|
|
subroutine MPI_Graphdims_get(comm, nnodes, nedges, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: nnodes
|
|
|
|
integer, intent(out) :: nedges
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Graphdims_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Grequest_complete
|
|
|
|
|
|
|
|
subroutine MPI_Grequest_complete(request, ierr)
|
|
|
|
integer, intent(in) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Grequest_complete
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Grequest_start
|
|
|
|
|
|
|
|
subroutine MPI_Grequest_start(query_fn, free_fn, cancel_fn, extra_state, request&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
external :: query_fn
|
|
|
|
external :: free_fn
|
|
|
|
external :: cancel_fn
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Grequest_start
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_compare
|
|
|
|
|
|
|
|
subroutine MPI_Group_compare(group1, group2, result, ierr)
|
|
|
|
integer, intent(in) :: group1
|
|
|
|
integer, intent(in) :: group2
|
|
|
|
integer, intent(out) :: result
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_compare
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_difference
|
|
|
|
|
|
|
|
subroutine MPI_Group_difference(group1, group2, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group1
|
|
|
|
integer, intent(in) :: group2
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_difference
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_excl
|
|
|
|
|
|
|
|
subroutine MPI_Group_excl(group, n, ranks, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(in) :: n
|
|
|
|
integer, dimension(*), intent(in) :: ranks
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_excl
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_free
|
|
|
|
|
|
|
|
subroutine MPI_Group_free(group, ierr)
|
|
|
|
integer, intent(inout) :: group
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_incl
|
|
|
|
|
|
|
|
subroutine MPI_Group_incl(group, n, ranks, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(in) :: n
|
|
|
|
integer, dimension(*), intent(in) :: ranks
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_incl
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_intersection
|
|
|
|
|
|
|
|
subroutine MPI_Group_intersection(group1, group2, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group1
|
|
|
|
integer, intent(in) :: group2
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_intersection
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_range_excl
|
|
|
|
|
|
|
|
subroutine MPI_Group_range_excl(group, n, ranges, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(in) :: n
|
|
|
|
integer, dimension(3, *), intent(in) :: ranges
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_range_excl
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_range_incl
|
|
|
|
|
|
|
|
subroutine MPI_Group_range_incl(group, n, ranges, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(in) :: n
|
|
|
|
integer, dimension(3, *), intent(in) :: ranges
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_range_incl
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_rank
|
|
|
|
|
|
|
|
subroutine MPI_Group_rank(group, rank, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(out) :: rank
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_rank
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_size
|
|
|
|
|
|
|
|
subroutine MPI_Group_size(group, size, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_translate_ranks
|
|
|
|
|
|
|
|
subroutine MPI_Group_translate_ranks(group1, n, ranks1, group2, ranks2&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: group1
|
|
|
|
integer, intent(in) :: n
|
|
|
|
integer, dimension(*), intent(in) :: ranks1
|
|
|
|
integer, intent(in) :: group2
|
|
|
|
integer, dimension(*), intent(out) :: ranks2
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_translate_ranks
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Group_union
|
|
|
|
|
|
|
|
subroutine MPI_Group_union(group1, group2, newgroup, ierr)
|
|
|
|
integer, intent(in) :: group1
|
|
|
|
integer, intent(in) :: group2
|
|
|
|
integer, intent(out) :: newgroup
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Group_union
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
2012-06-23 00:54:12 +04:00
|
|
|
interface MPI_Iallgather
|
|
|
|
|
|
|
|
subroutine MPI_Iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iallgather
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Iallgatherv
|
|
|
|
|
|
|
|
subroutine MPI_Iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
|
|
|
|
displs, recvtype, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: displs
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iallgatherv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Iallreduce
|
|
|
|
|
|
|
|
subroutine MPI_Iallreduce(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iallreduce
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ialltoall
|
|
|
|
|
|
|
|
subroutine MPI_Ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ialltoall
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ialltoallv
|
|
|
|
|
|
|
|
subroutine MPI_Ialltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, &
|
|
|
|
recvcounts, rdispls, recvtype, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, dimension(*), intent(in) :: sendcounts
|
|
|
|
integer, dimension(*), intent(in) :: sdispls
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: rdispls
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ialltoallv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ialltoallw
|
|
|
|
|
|
|
|
subroutine MPI_Ialltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, &
|
|
|
|
recvcounts, rdispls, recvtypes, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, dimension(*), intent(in) :: sendcounts
|
|
|
|
integer, dimension(*), intent(in) :: sdispls
|
|
|
|
integer, dimension(*), intent(in) :: sendtypes
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: rdispls
|
|
|
|
integer, dimension(*), intent(in) :: recvtypes
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ialltoallw
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ibarrier
|
|
|
|
|
|
|
|
subroutine MPI_Ibarrier(comm, request, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ibarrier
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ibcast
|
|
|
|
|
|
|
|
subroutine MPI_Ibcast(buffer, count, datatype, root, comm&
|
|
|
|
, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buffer
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ibcast
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Iexscan
|
|
|
|
|
|
|
|
subroutine MPI_Iexscan(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iexscan
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
interface MPI_Ibsend
|
|
|
|
|
|
|
|
subroutine MPI_Ibsend(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ibsend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
2012-06-23 00:54:12 +04:00
|
|
|
interface MPI_Igather
|
|
|
|
|
|
|
|
subroutine MPI_Igather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, root, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Igather
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Igatherv
|
|
|
|
|
|
|
|
subroutine MPI_Igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
|
|
|
|
displs, recvtype, root, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, dimension(*), intent(in) :: displs
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Igatherv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
interface MPI_Improbe
|
|
|
|
|
|
|
|
subroutine MPI_Improbe(source, tag, comm, flag, message, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: message
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Improbe
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Imrecv
|
|
|
|
|
|
|
|
subroutine MPI_Imrecv(buf, count, datatype, message, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(inout) :: message
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Imrecv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_create
|
|
|
|
|
|
|
|
subroutine MPI_Info_create(info, ierr)
|
|
|
|
integer, intent(out) :: info
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_delete
|
|
|
|
|
|
|
|
subroutine MPI_Info_delete(info, key, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(in) :: key
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_delete
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_dup
|
|
|
|
|
|
|
|
subroutine MPI_Info_dup(info, newinfo, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(out) :: newinfo
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_dup
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_free
|
|
|
|
|
|
|
|
subroutine MPI_Info_free(info, ierr)
|
|
|
|
integer, intent(inout) :: info
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_get
|
|
|
|
|
|
|
|
subroutine MPI_Info_get(info, key, valuelen, value, flag&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(in) :: key
|
|
|
|
integer, intent(in) :: valuelen
|
|
|
|
character(len=*), intent(out) :: value
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_get
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_get_nkeys
|
|
|
|
|
|
|
|
subroutine MPI_Info_get_nkeys(info, nkeys, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(out) :: nkeys
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_get_nkeys
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_get_nthkey
|
|
|
|
|
|
|
|
subroutine MPI_Info_get_nthkey(info, n, key, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(in) :: n
|
|
|
|
character(len=*), intent(out) :: key
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_get_nthkey
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_get_valuelen
|
|
|
|
|
|
|
|
subroutine MPI_Info_get_valuelen(info, key, valuelen, flag, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(in) :: key
|
|
|
|
integer, intent(out) :: valuelen
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_get_valuelen
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Info_set
|
|
|
|
|
|
|
|
subroutine MPI_Info_set(info, key, value, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(in) :: key
|
|
|
|
character(len=*), intent(in) :: value
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Info_set
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Init
|
|
|
|
|
|
|
|
subroutine MPI_Init(ierr)
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Init
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Init_thread
|
|
|
|
|
|
|
|
subroutine MPI_Init_thread(required, provided, ierr)
|
|
|
|
integer, intent(in) :: required
|
|
|
|
integer, intent(out) :: provided
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Init_thread
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Initialized
|
|
|
|
|
|
|
|
subroutine MPI_Initialized(flag, ierr)
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Initialized
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Intercomm_create
|
|
|
|
|
|
|
|
subroutine MPI_Intercomm_create(local_comm, local_leader, bridge_comm, remote_leader, tag, &
|
|
|
|
newintercomm, ierr)
|
|
|
|
integer, intent(in) :: local_comm
|
|
|
|
integer, intent(in) :: local_leader
|
|
|
|
integer, intent(in) :: bridge_comm
|
|
|
|
integer, intent(in) :: remote_leader
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(out) :: newintercomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Intercomm_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Intercomm_merge
|
|
|
|
|
|
|
|
subroutine MPI_Intercomm_merge(intercomm, high, newintercomm, ierr)
|
|
|
|
integer, intent(in) :: intercomm
|
|
|
|
logical, intent(in) :: high
|
|
|
|
integer, intent(out) :: newintercomm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Intercomm_merge
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Iprobe
|
|
|
|
|
|
|
|
subroutine MPI_Iprobe(source, tag, comm, flag, status&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iprobe
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Irecv
|
|
|
|
|
|
|
|
subroutine MPI_Irecv(buf, count, datatype, source, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Irecv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
2012-06-23 00:54:12 +04:00
|
|
|
interface MPI_Ireduce
|
|
|
|
|
|
|
|
subroutine MPI_Ireduce(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
root, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ireduce
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ireduce_scatter
|
|
|
|
|
|
|
|
subroutine MPI_Ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ireduce_scatter
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ireduce_scatter_block
|
|
|
|
|
|
|
|
subroutine MPI_Ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ireduce_scatter_block
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
interface MPI_Irsend
|
|
|
|
|
|
|
|
subroutine MPI_Irsend(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Irsend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Is_thread_main
|
|
|
|
|
|
|
|
subroutine MPI_Is_thread_main(flag, ierr)
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Is_thread_main
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
2012-06-23 00:54:12 +04:00
|
|
|
interface MPI_Iscan
|
|
|
|
|
|
|
|
subroutine MPI_Iscan(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iscan
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Iscatter
|
|
|
|
|
|
|
|
subroutine MPI_Iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, root, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iscatter
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Iscatterv
|
|
|
|
|
|
|
|
subroutine MPI_Iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, &
|
|
|
|
recvcount, recvtype, root, comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, dimension(*), intent(in) :: sendcounts
|
|
|
|
integer, dimension(*), intent(in) :: displs
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Iscatterv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
interface MPI_Isend
|
|
|
|
|
|
|
|
subroutine MPI_Isend(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Isend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Issend
|
|
|
|
|
|
|
|
subroutine MPI_Issend(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Issend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Keyval_create
|
|
|
|
|
|
|
|
subroutine MPI_Keyval_create(copy_fn, delete_fn, keyval, extra_state, ierr)
|
|
|
|
external :: copy_fn
|
|
|
|
external :: delete_fn
|
|
|
|
integer, intent(out) :: keyval
|
|
|
|
integer, intent(in) :: extra_state
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Keyval_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Keyval_free
|
|
|
|
|
|
|
|
subroutine MPI_Keyval_free(keyval, ierr)
|
|
|
|
integer, intent(inout) :: keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Keyval_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Lookup_name
|
|
|
|
|
|
|
|
subroutine MPI_Lookup_name(service_name, info, port_name, ierr)
|
|
|
|
character(len=*), intent(in) :: service_name
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(out) :: port_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Lookup_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Mprobe
|
|
|
|
|
|
|
|
subroutine MPI_Mprobe(source, tag, comm, message, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: message
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Mprobe
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Mrecv
|
|
|
|
|
|
|
|
subroutine MPI_Mrecv(buf, count, datatype, message, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(inout) :: message
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Mrecv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Op_commutative
|
|
|
|
|
|
|
|
subroutine MPI_Op_commutative(op, commute, ierr)
|
|
|
|
integer, intent(in) :: op
|
|
|
|
logical, intent(out) :: commute
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Op_commutative
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Op_create
|
|
|
|
|
|
|
|
subroutine MPI_Op_create(function, commute, op, ierr)
|
|
|
|
external :: function
|
|
|
|
logical, intent(in) :: commute
|
|
|
|
integer, intent(out) :: op
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Op_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Op_free
|
|
|
|
|
|
|
|
subroutine MPI_Op_free(op, ierr)
|
|
|
|
integer, intent(inout) :: op
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Op_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Open_port
|
|
|
|
|
|
|
|
subroutine MPI_Open_port(info, port_name, ierr)
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(out) :: port_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Open_port
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Pack
|
|
|
|
|
|
|
|
subroutine MPI_Pack(inbuf, incount, datatype, outbuf, outsize, &
|
|
|
|
position, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
|
|
|
|
integer, intent(in) :: incount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
|
|
|
|
integer, intent(in) :: outsize
|
|
|
|
integer, intent(inout) :: position
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Pack
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Pack_external
|
|
|
|
|
|
|
|
subroutine MPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, &
|
|
|
|
outsize, position, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
character(len=*), intent(in) :: datarep
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
|
|
|
|
integer, intent(in) :: incount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: outsize
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(inout) :: position
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Pack_external
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Pack_external_size
|
|
|
|
|
|
|
|
subroutine MPI_Pack_external_size(datarep, incount, datatype, size, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
character(len=*), intent(in) :: datarep
|
|
|
|
integer, intent(in) :: incount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Pack_external_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Pack_size
|
|
|
|
|
|
|
|
subroutine MPI_Pack_size(incount, datatype, comm, size, ierr)
|
|
|
|
integer, intent(in) :: incount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Pack_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Pcontrol
|
|
|
|
|
|
|
|
subroutine MPI_Pcontrol(level)
|
|
|
|
integer, intent(in) :: level
|
|
|
|
|
|
|
|
end subroutine MPI_Pcontrol
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Probe
|
|
|
|
|
|
|
|
subroutine MPI_Probe(source, tag, comm, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Probe
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Publish_name
|
|
|
|
|
|
|
|
subroutine MPI_Publish_name(service_name, info, port_name, ierr)
|
|
|
|
character(len=*), intent(in) :: service_name
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(in) :: port_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Publish_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Put
|
|
|
|
|
|
|
|
subroutine MPI_Put(origin_addr, origin_count, origin_datatype, target_rank, target_disp, &
|
|
|
|
target_count, target_datatype, win, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ origin_addr
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: origin_addr
|
|
|
|
integer, intent(in) :: origin_count
|
|
|
|
integer, intent(in) :: origin_datatype
|
|
|
|
integer, intent(in) :: target_rank
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
|
|
|
|
integer, intent(in) :: target_count
|
|
|
|
integer, intent(in) :: target_datatype
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Put
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Query_thread
|
|
|
|
|
|
|
|
subroutine MPI_Query_thread(provided, ierr)
|
|
|
|
integer, intent(out) :: provided
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Query_thread
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Recv
|
|
|
|
|
|
|
|
subroutine MPI_Recv(buf, count, datatype, source, tag, &
|
|
|
|
comm, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Recv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Recv_init
|
|
|
|
|
|
|
|
subroutine MPI_Recv_init(buf, count, datatype, source, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Recv_init
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Reduce
|
|
|
|
|
|
|
|
subroutine MPI_Reduce(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
root, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Reduce
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Reduce_local
|
|
|
|
|
|
|
|
subroutine MPI_Reduce_local(inbuf, inout, count, datatype, op, &
|
|
|
|
ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inout
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: inout
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Reduce_local
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Reduce_scatter
|
|
|
|
|
|
|
|
subroutine MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, dimension(*), intent(in) :: recvcounts
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Reduce_scatter
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
2012-06-23 00:54:12 +04:00
|
|
|
interface MPI_Reduce_scatter_block
|
|
|
|
|
|
|
|
subroutine MPI_Reduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Reduce_scatter_block
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
interface MPI_Register_datarep
|
|
|
|
|
|
|
|
subroutine MPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
character(len=*), intent(in) :: datarep
|
|
|
|
external :: read_conversion_fn
|
|
|
|
external :: write_conversion_fn
|
|
|
|
external :: dtype_file_extent_fn
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Register_datarep
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Request_free
|
|
|
|
|
|
|
|
subroutine MPI_Request_free(request, ierr)
|
|
|
|
integer, intent(inout) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Request_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Request_get_status
|
|
|
|
|
|
|
|
subroutine MPI_Request_get_status(request, flag, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: request
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Request_get_status
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Rsend
|
|
|
|
|
|
|
|
subroutine MPI_Rsend(ibuf, count, datatype, dest, tag, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ ibuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: ibuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Rsend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Rsend_init
|
|
|
|
|
|
|
|
subroutine MPI_Rsend_init(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Rsend_init
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Scan
|
|
|
|
|
|
|
|
subroutine MPI_Scan(sendbuf, recvbuf, count, datatype, op, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: op
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Scan
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Scatter
|
|
|
|
|
|
|
|
subroutine MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
|
|
|
|
recvtype, root, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Scatter
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Scatterv
|
|
|
|
|
|
|
|
subroutine MPI_Scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, &
|
|
|
|
recvcount, recvtype, root, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, dimension(*), intent(in) :: sendcounts
|
|
|
|
integer, dimension(*), intent(in) :: displs
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: root
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Scatterv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Send
|
|
|
|
|
|
|
|
subroutine MPI_Send(buf, count, datatype, dest, tag, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Send
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Send_init
|
|
|
|
|
|
|
|
subroutine MPI_Send_init(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Send_init
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Sendrecv
|
|
|
|
|
|
|
|
subroutine MPI_Sendrecv(sendbuf, sendcount, sendtype, dest, sendtag, &
|
|
|
|
recvbuf, recvcount, recvtype, source, recvtag, comm, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
|
|
|
|
integer, intent(in) :: sendcount
|
|
|
|
integer, intent(in) :: sendtype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: sendtag
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
|
|
|
|
integer, intent(in) :: recvcount
|
|
|
|
integer, intent(in) :: recvtype
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: recvtag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sendrecv
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Sendrecv_replace
|
|
|
|
|
|
|
|
subroutine MPI_Sendrecv_replace(buf, count, datatype, dest, sendtag, &
|
|
|
|
source, recvtag, comm, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: sendtag
|
|
|
|
integer, intent(in) :: source
|
|
|
|
integer, intent(in) :: recvtag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sendrecv_replace
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Sizeof
|
|
|
|
|
|
|
|
! JMS choice
|
|
|
|
subroutine MPI_Sizeof(x, size, ierr)
|
|
|
|
character, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DL(x, size, ierr)
|
|
|
|
logical, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DL
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DI1(x, size, ierr)
|
|
|
|
integer*1, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DI1
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DI2(x, size, ierr)
|
|
|
|
integer*2, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DI2
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DI4(x, size, ierr)
|
|
|
|
integer*4, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DI4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DI8(x, size, ierr)
|
|
|
|
integer*8, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DI8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DR4(x, size, ierr)
|
|
|
|
real*4, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DR4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DR8(x, size, ierr)
|
|
|
|
real*8, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DR8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DC8(x, size, ierr)
|
|
|
|
complex*8, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DC8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof0DC16(x, size, ierr)
|
|
|
|
complex*16, intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof0DC16
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DCH(x, size, ierr)
|
|
|
|
character, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DCH
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DL(x, size, ierr)
|
|
|
|
logical, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DL
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DI1(x, size, ierr)
|
|
|
|
integer*1, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DI1
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DI2(x, size, ierr)
|
|
|
|
integer*2, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DI2
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DI4(x, size, ierr)
|
|
|
|
integer*4, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DI4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DI8(x, size, ierr)
|
|
|
|
integer*8, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DI8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DR4(x, size, ierr)
|
|
|
|
real*4, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DR4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DR8(x, size, ierr)
|
|
|
|
real*8, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DR8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DC8(x, size, ierr)
|
|
|
|
complex*8, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DC8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof1DC16(x, size, ierr)
|
|
|
|
complex*16, dimension(*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof1DC16
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DCH(x, size, ierr)
|
|
|
|
character, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DCH
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DL(x, size, ierr)
|
|
|
|
logical, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DL
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DI1(x, size, ierr)
|
|
|
|
integer*1, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DI1
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DI2(x, size, ierr)
|
|
|
|
integer*2, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DI2
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DI4(x, size, ierr)
|
|
|
|
integer*4, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DI4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DI8(x, size, ierr)
|
|
|
|
integer*8, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DI8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DR4(x, size, ierr)
|
|
|
|
real*4, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DR4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DR8(x, size, ierr)
|
|
|
|
real*8, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DR8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DC8(x, size, ierr)
|
|
|
|
complex*8, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DC8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof2DC16(x, size, ierr)
|
|
|
|
complex*16, dimension(1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof2DC16
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DCH(x, size, ierr)
|
|
|
|
character, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DCH
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DL(x, size, ierr)
|
|
|
|
logical, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DL
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DI1(x, size, ierr)
|
|
|
|
integer*1, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DI1
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DI2(x, size, ierr)
|
|
|
|
integer*2, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DI2
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DI4(x, size, ierr)
|
|
|
|
integer*4, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DI4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DI8(x, size, ierr)
|
|
|
|
integer*8, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DI8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DR4(x, size, ierr)
|
|
|
|
real*4, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DR4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DR8(x, size, ierr)
|
|
|
|
real*8, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DR8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DC8(x, size, ierr)
|
|
|
|
complex*8, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DC8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof3DC16(x, size, ierr)
|
|
|
|
complex*16, dimension(1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof3DC16
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DCH(x, size, ierr)
|
|
|
|
character, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DCH
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DL(x, size, ierr)
|
|
|
|
logical, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DL
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DI1(x, size, ierr)
|
|
|
|
integer*1, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DI1
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DI2(x, size, ierr)
|
|
|
|
integer*2, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DI2
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DI4(x, size, ierr)
|
|
|
|
integer*4, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DI4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DI8(x, size, ierr)
|
|
|
|
integer*8, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DI8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DR4(x, size, ierr)
|
|
|
|
real*4, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DR4
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DR8(x, size, ierr)
|
|
|
|
real*8, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DR8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DC8(x, size, ierr)
|
|
|
|
complex*8, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DC8
|
|
|
|
|
|
|
|
|
|
|
|
subroutine MPI_Sizeof4DC16(x, size, ierr)
|
|
|
|
complex*16, dimension(1,1,1,*), intent(in) :: x
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Sizeof4DC16
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ssend
|
|
|
|
|
|
|
|
subroutine MPI_Ssend(buf, count, datatype, dest, tag, &
|
|
|
|
comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ssend
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Ssend_init
|
|
|
|
|
|
|
|
subroutine MPI_Ssend_init(buf, count, datatype, dest, tag, &
|
|
|
|
comm, request, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: dest
|
|
|
|
integer, intent(in) :: tag
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Ssend_init
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Start
|
|
|
|
|
|
|
|
subroutine MPI_Start(request, ierr)
|
|
|
|
integer, intent(inout) :: request
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Start
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Startall
|
|
|
|
|
|
|
|
subroutine MPI_Startall(count, array_of_requests, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(*), intent(inout) :: array_of_requests
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Startall
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Status_set_cancelled
|
|
|
|
|
|
|
|
subroutine MPI_Status_set_cancelled(status, flag, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(inout) :: status
|
|
|
|
logical, intent(in) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Status_set_cancelled
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Status_set_elements
|
|
|
|
|
|
|
|
subroutine MPI_Status_set_elements(status, datatype, count, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(inout) :: status
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Status_set_elements
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Test
|
|
|
|
|
|
|
|
subroutine MPI_Test(request, flag, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(inout) :: request
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Test
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Test_cancelled
|
|
|
|
|
|
|
|
subroutine MPI_Test_cancelled(status, flag, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(in) :: status
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Test_cancelled
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Testall
|
|
|
|
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
subroutine MPI_Testall(count, array_of_requests, flag, array_of_statuses, ierr)
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(count), intent(inout) :: array_of_requests
|
|
|
|
logical, intent(out) :: flag
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
integer, intent(out) :: ierr
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
end subroutine MPI_Testall
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Testany
|
|
|
|
|
|
|
|
subroutine MPI_Testany(count, array_of_requests, index, flag, status&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(count), intent(inout) :: array_of_requests
|
|
|
|
integer, intent(out) :: index
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Testany
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Testsome
|
|
|
|
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
subroutine MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: incount
|
|
|
|
integer, dimension(incount), intent(inout) :: array_of_requests
|
|
|
|
integer, intent(out) :: outcount
|
|
|
|
integer, dimension(*), intent(out) :: array_of_indices
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
integer, intent(out) :: ierr
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
end subroutine MPI_Testsome
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Topo_test
|
|
|
|
|
|
|
|
subroutine MPI_Topo_test(comm, status, ierr)
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Topo_test
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_commit
|
|
|
|
|
|
|
|
subroutine MPI_Type_commit(type, ierr)
|
|
|
|
integer, intent(inout) :: type
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_commit
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_contiguous
|
|
|
|
|
|
|
|
subroutine MPI_Type_contiguous(count, oldtype, newtype, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_contiguous
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_darray
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_darray(size, rank, ndims, gsize_array, distrib_array, &
|
|
|
|
darg_array, psize_array, order, oldtype, newtype, ierr)
|
|
|
|
integer, intent(in) :: size
|
|
|
|
integer, intent(in) :: rank
|
|
|
|
integer, intent(in) :: ndims
|
|
|
|
integer, dimension(*), intent(in) :: gsize_array
|
|
|
|
integer, dimension(*), intent(in) :: distrib_array
|
|
|
|
integer, dimension(*), intent(in) :: darg_array
|
|
|
|
integer, dimension(*), intent(in) :: psize_array
|
|
|
|
integer, intent(in) :: order
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_darray
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_f90_complex
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_f90_complex(p, r, newtype, ierr)
|
|
|
|
integer, intent(in) :: p
|
|
|
|
integer, intent(in) :: r
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_f90_complex
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_f90_integer
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_f90_integer(r, newtype, ierr)
|
|
|
|
integer, intent(in) :: r
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_f90_integer
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_f90_real
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_f90_real(p, r, newtype, ierr)
|
|
|
|
integer, intent(in) :: p
|
|
|
|
integer, intent(in) :: r
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_f90_real
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_hindexed
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_hindexed(count, array_of_blocklengths, array_of_displacements, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(*), intent(in) :: array_of_blocklengths
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_hindexed
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_hvector
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_hvector(count, blocklength, stride, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: blocklength
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: stride
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_hvector
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_indexed_block
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_indexed_block(count, blocklength, array_of_displacements, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: blocklength
|
|
|
|
integer, dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_indexed_block
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
2012-08-08 17:17:57 +04:00
|
|
|
interface MPI_Type_create_hindexed_block
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_hindexed_block(count, blocklength, array_of_displacements, oldtype, newtype&
|
|
|
|
, ierr)
|
2012-08-08 17:46:15 +04:00
|
|
|
include 'mpif-config.h'
|
2012-08-08 17:17:57 +04:00
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: blocklength
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_hindexed_block
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
interface MPI_Type_create_keyval
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_keyval(type_copy_attr_fn, type_delete_attr_fn, type_keyval, extra_state, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
external :: type_copy_attr_fn
|
|
|
|
external :: type_delete_attr_fn
|
|
|
|
integer, intent(out) :: type_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_keyval
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_resized
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_resized(oldtype, lb, extent, newtype, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: lb
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extent
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_resized
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_struct
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_struct(count, array_of_block_lengths, array_of_displacements, array_of_types, newtype&
|
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(*), intent(in) :: array_of_block_lengths
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, dimension(*), intent(in) :: array_of_types
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_struct
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_create_subarray
|
|
|
|
|
|
|
|
subroutine MPI_Type_create_subarray(ndims, size_array, subsize_array, start_array, order, &
|
|
|
|
oldtype, newtype, ierr)
|
|
|
|
integer, intent(in) :: ndims
|
|
|
|
integer, dimension(*), intent(in) :: size_array
|
|
|
|
integer, dimension(*), intent(in) :: subsize_array
|
|
|
|
integer, dimension(*), intent(in) :: start_array
|
|
|
|
integer, intent(in) :: order
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_create_subarray
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_delete_attr
|
|
|
|
|
|
|
|
subroutine MPI_Type_delete_attr(type, type_keyval, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(in) :: type_keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_delete_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_dup
|
|
|
|
|
|
|
|
subroutine MPI_Type_dup(type, newtype, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_dup
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_extent
|
|
|
|
|
|
|
|
subroutine MPI_Type_extent(type, extent, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(out) :: extent
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_extent
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_free
|
|
|
|
|
|
|
|
subroutine MPI_Type_free(type, ierr)
|
|
|
|
integer, intent(inout) :: type
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_free_keyval
|
|
|
|
|
|
|
|
subroutine MPI_Type_free_keyval(type_keyval, ierr)
|
|
|
|
integer, intent(inout) :: type_keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_free_keyval
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_get_attr
|
|
|
|
|
|
|
|
subroutine MPI_Type_get_attr(type, type_keyval, attribute_val, flag, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(in) :: type_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: attribute_val
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_get_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_get_contents
|
|
|
|
|
|
|
|
subroutine MPI_Type_get_contents(mtype, max_integers, max_addresses, max_datatypes, array_of_integers, &
|
|
|
|
array_of_addresses, array_of_datatypes, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: mtype
|
|
|
|
integer, intent(in) :: max_integers
|
|
|
|
integer, intent(in) :: max_addresses
|
|
|
|
integer, intent(in) :: max_datatypes
|
|
|
|
integer, dimension(*), intent(out) :: array_of_integers
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(out) :: array_of_addresses
|
|
|
|
integer, dimension(*), intent(out) :: array_of_datatypes
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_get_contents
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_get_envelope
|
|
|
|
|
|
|
|
subroutine MPI_Type_get_envelope(type, num_integers, num_addresses, num_datatypes, combiner&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(out) :: num_integers
|
|
|
|
integer, intent(out) :: num_addresses
|
|
|
|
integer, intent(out) :: num_datatypes
|
|
|
|
integer, intent(out) :: combiner
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_get_envelope
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_get_extent
|
|
|
|
|
|
|
|
subroutine MPI_Type_get_extent(type, lb, extent, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: lb
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: extent
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_get_extent
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_get_name
|
|
|
|
|
|
|
|
subroutine MPI_Type_get_name(type, type_name, resultlen, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
character(len=*), intent(out) :: type_name
|
|
|
|
integer, intent(out) :: resultlen
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_get_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_get_true_extent
|
|
|
|
|
|
|
|
subroutine MPI_Type_get_true_extent(datatype, true_lb, true_extent, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: true_lb
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: true_extent
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_get_true_extent
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_hindexed
|
|
|
|
|
|
|
|
subroutine MPI_Type_hindexed(count, array_of_blocklengths, array_of_displacements, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(*), intent(in) :: array_of_blocklengths
|
|
|
|
integer, dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_hindexed
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_hvector
|
|
|
|
|
|
|
|
subroutine MPI_Type_hvector(count, blocklength, stride, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: blocklength
|
|
|
|
integer, intent(in) :: stride
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_hvector
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_indexed
|
|
|
|
|
|
|
|
subroutine MPI_Type_indexed(count, array_of_blocklengths, array_of_displacements, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(*), intent(in) :: array_of_blocklengths
|
|
|
|
integer, dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_indexed
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_lb
|
|
|
|
|
|
|
|
subroutine MPI_Type_lb(type, lb, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(out) :: lb
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_lb
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_match_size
|
|
|
|
|
|
|
|
subroutine MPI_Type_match_size(typeclass, size, type, ierr)
|
|
|
|
integer, intent(in) :: typeclass
|
|
|
|
integer, intent(in) :: size
|
|
|
|
integer, intent(out) :: type
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_match_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_set_attr
|
|
|
|
|
|
|
|
subroutine MPI_Type_set_attr(type, type_keyval, attr_val, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(in) :: type_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: attr_val
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_set_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_set_name
|
|
|
|
|
|
|
|
subroutine MPI_Type_set_name(type, type_name, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
character(len=*), intent(in) :: type_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_set_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_size
|
|
|
|
|
|
|
|
subroutine MPI_Type_size(type, size, ierr)
|
|
|
|
integer, intent(in) :: type
|
|
|
|
integer, intent(out) :: size
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_size
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_struct
|
|
|
|
|
|
|
|
subroutine MPI_Type_struct(count, array_of_blocklengths, array_of_displacements, array_of_types, newtype&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(*), intent(in) :: array_of_blocklengths
|
|
|
|
integer, dimension(*), intent(in) :: array_of_displacements
|
|
|
|
integer, dimension(*), intent(in) :: array_of_types
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_struct
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_ub
|
|
|
|
|
|
|
|
subroutine MPI_Type_ub(mtype, ub, ierr)
|
|
|
|
integer, intent(in) :: mtype
|
|
|
|
integer, intent(out) :: ub
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_ub
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Type_vector
|
|
|
|
|
|
|
|
subroutine MPI_Type_vector(count, blocklength, stride, oldtype, newtype&
|
|
|
|
, ierr)
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, intent(in) :: blocklength
|
|
|
|
integer, intent(in) :: stride
|
|
|
|
integer, intent(in) :: oldtype
|
|
|
|
integer, intent(out) :: newtype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Type_vector
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Unpack
|
|
|
|
|
|
|
|
subroutine MPI_Unpack(inbuf, insize, position, outbuf, outcount, &
|
|
|
|
datatype, comm, ierr)
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
|
|
|
|
integer, intent(in) :: insize
|
|
|
|
integer, intent(inout) :: position
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
|
|
|
|
integer, intent(in) :: outcount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Unpack
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Unpack_external
|
|
|
|
|
|
|
|
subroutine MPI_Unpack_external(datarep, inbuf, insize, position, outbuf, &
|
|
|
|
outcount, datatype, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
character(len=*), intent(in) :: datarep
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: insize
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(inout) :: position
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
|
|
|
|
integer, intent(in) :: outcount
|
|
|
|
integer, intent(in) :: datatype
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Unpack_external
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Unpublish_name
|
|
|
|
|
|
|
|
subroutine MPI_Unpublish_name(service_name, info, port_name, ierr)
|
|
|
|
character(len=*), intent(in) :: service_name
|
|
|
|
integer, intent(in) :: info
|
|
|
|
character(len=*), intent(in) :: port_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Unpublish_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Wait
|
|
|
|
|
|
|
|
subroutine MPI_Wait(request, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(inout) :: request
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Wait
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Waitall
|
|
|
|
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
subroutine MPI_Waitall(count, array_of_requests, array_of_statuses, ierr)
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(count), intent(inout) :: array_of_requests
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
integer, intent(out) :: ierr
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
end subroutine MPI_Waitall
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Waitany
|
|
|
|
|
|
|
|
subroutine MPI_Waitany(count, array_of_requests, index, status, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: count
|
|
|
|
integer, dimension(count), intent(inout) :: array_of_requests
|
|
|
|
integer, intent(out) :: index
|
|
|
|
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Waitany
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Waitsome
|
|
|
|
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
subroutine MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: incount
|
|
|
|
integer, dimension(incount), intent(inout) :: array_of_requests
|
|
|
|
integer, intent(out) :: outcount
|
|
|
|
integer, dimension(*), intent(out) :: array_of_indices
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
integer, intent(out) :: ierr
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
end subroutine MPI_Waitsome
|
== Highlights ==
1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler
1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release
1. The mpi module has been re-implemented and is significantly "mo' bettah"
1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module
This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk.
== More details ==
Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7.
Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey:
* Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort)
* The Fortran J3 committee
* Tobias Burnus/gfortran
* Tony !Goetz/Absoft
* Terry !Donte/Oracle
* ...and probably others whom I'm forgetting :-(
There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax.
Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time.
As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory:
{{{
ompi/mpi/fortran/
base/ - glue code
mpif-h/ - what used to be ompi/mpi/f77
use-mpi-tkr/ - what used to be ompi/mpi/f90
use-mpi-ignore-tkr/ - new mpi module implementation
use-mpi-f08/ - new mpi_f08 module implementation
}}}
There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version.
Other things that were done:
* ompi_info grew a few new output fields to describe what level of Fortran support is included
* Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added
* The old Fortran MPI libraries were renamed:
* libmpi_f77 -> libmpi_mpifh
* libmpi_f90 -> libmpi_usempi
* The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example:
{{{
shell$ ./configure CC=icc CXX=icpc FC=ifort ...
}}}
All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches).
I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed.
This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_call_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Win_call_errhandler(win, errorcode, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(in) :: errorcode
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_call_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_complete
|
|
|
|
|
|
|
|
subroutine MPI_Win_complete(win, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_complete
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_create
|
|
|
|
|
|
|
|
subroutine MPI_Win_create(base, size, disp_unit, info, comm, &
|
|
|
|
win, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ base
|
|
|
|
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: base
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: size
|
|
|
|
integer, intent(in) :: disp_unit
|
|
|
|
integer, intent(in) :: info
|
|
|
|
integer, intent(in) :: comm
|
|
|
|
integer, intent(out) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_create
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_create_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Win_create_errhandler(function, errhandler, ierr)
|
|
|
|
external :: function
|
|
|
|
integer, intent(out) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_create_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_create_keyval
|
|
|
|
|
|
|
|
subroutine MPI_Win_create_keyval(win_copy_attr_fn, win_delete_attr_fn, win_keyval, extra_state, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
external :: win_copy_attr_fn
|
|
|
|
external :: win_delete_attr_fn
|
|
|
|
integer, intent(out) :: win_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_create_keyval
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_delete_attr
|
|
|
|
|
|
|
|
subroutine MPI_Win_delete_attr(win, win_keyval, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(in) :: win_keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_delete_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_fence
|
|
|
|
|
|
|
|
subroutine MPI_Win_fence(assert, win, ierr)
|
|
|
|
integer, intent(in) :: assert
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_fence
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_free
|
|
|
|
|
|
|
|
subroutine MPI_Win_free(win, ierr)
|
|
|
|
integer, intent(inout) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_free
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_free_keyval
|
|
|
|
|
|
|
|
subroutine MPI_Win_free_keyval(win_keyval, ierr)
|
|
|
|
integer, intent(inout) :: win_keyval
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_free_keyval
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_get_attr
|
|
|
|
|
|
|
|
subroutine MPI_Win_get_attr(win, win_keyval, attribute_val, flag, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(in) :: win_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(out) :: attribute_val
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_get_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_get_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Win_get_errhandler(win, errhandler, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_get_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_get_group
|
|
|
|
|
|
|
|
subroutine MPI_Win_get_group(win, group, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: group
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_get_group
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_get_name
|
|
|
|
|
|
|
|
subroutine MPI_Win_get_name(win, win_name, resultlen, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
character(len=*), intent(out) :: win_name
|
|
|
|
integer, intent(out) :: resultlen
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_get_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_lock
|
|
|
|
|
|
|
|
subroutine MPI_Win_lock(lock_type, rank, assert, win, ierr)
|
|
|
|
integer, intent(in) :: lock_type
|
|
|
|
integer, intent(in) :: rank
|
|
|
|
integer, intent(in) :: assert
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_lock
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_post
|
|
|
|
|
|
|
|
subroutine MPI_Win_post(group, assert, win, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(in) :: assert
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_post
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_set_attr
|
|
|
|
|
|
|
|
subroutine MPI_Win_set_attr(win, win_keyval, attribute_val, ierr)
|
|
|
|
include 'mpif-config.h'
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(in) :: win_keyval
|
|
|
|
integer(kind=MPI_ADDRESS_KIND), intent(in) :: attribute_val
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_set_attr
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_set_errhandler
|
|
|
|
|
|
|
|
subroutine MPI_Win_set_errhandler(win, errhandler, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(in) :: errhandler
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_set_errhandler
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_set_name
|
|
|
|
|
|
|
|
subroutine MPI_Win_set_name(win, win_name, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
character(len=*), intent(in) :: win_name
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_set_name
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_start
|
|
|
|
|
|
|
|
subroutine MPI_Win_start(group, assert, win, ierr)
|
|
|
|
integer, intent(in) :: group
|
|
|
|
integer, intent(in) :: assert
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_start
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_test
|
|
|
|
|
|
|
|
subroutine MPI_Win_test(win, flag, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
logical, intent(out) :: flag
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_test
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_unlock
|
|
|
|
|
|
|
|
subroutine MPI_Win_unlock(rank, win, ierr)
|
|
|
|
integer, intent(in) :: rank
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_unlock
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Win_wait
|
|
|
|
|
|
|
|
subroutine MPI_Win_wait(win, ierr)
|
|
|
|
integer, intent(in) :: win
|
|
|
|
integer, intent(out) :: ierr
|
|
|
|
end subroutine MPI_Win_wait
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Wtick
|
|
|
|
|
|
|
|
function MPI_Wtick()
|
|
|
|
double precision MPI_Wtick
|
|
|
|
end function MPI_Wtick
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
interface MPI_Wtime
|
|
|
|
|
|
|
|
function MPI_Wtime()
|
|
|
|
double precision MPI_Wtime
|
|
|
|
end function MPI_Wtime
|
|
|
|
|
|
|
|
end interface
|