[MPIWG Fortran] An implementation problem of F08 binding
Jeff Squyres (jsquyres)
jsquyres at cisco.com
Thu May 1 14:51:43 CDT 2014
On May 1, 2014, at 2:34 PM, Junchao Zhang <jczhang at mcs.anl.gov> wrote:
> Hello,
> I met a problem when implementing F08 binding in MPICH. I have a file mpi_f08.F90, which contains all interfaces
>
> module mpi_f08
> ..
> interface MPI_Send
> subroutine MPI_Send_f08ts(buf, count, datatype, dest, tag, comm, ierror)
> use :: mpi_f08_types, only : MPI_Datatype, MPI_Comm
> implicit none
> type(*), dimension(..), intent(in) :: buf
> integer, intent(in) :: count, dest, tag
> type(MPI_Datatype), intent(in) :: datatype
> type(MPI_Comm), intent(in) :: comm
> integer, optional, intent(out) :: ierror
> end subroutine MPI_Send_f08ts
> end interface MPI_Send
> ..
> end module mpi_f08
>
> Then for each subroutine, I create a separate file which implement the wrapper function in Fortran. For example, send_f08ts.F90 has
>
> subroutine MPI_Send_f08ts(buf, count, datatype, dest, tag, comm, ierror)
> use :: mpi_f08, only : MPI_Datatype, MPI_Comm
> use, intrinsic :: iso_c_binding, only : c_int
> use :: mpi_c_interface, only : c_Datatype, c_Comm
> use :: mpi_c_interface, only : MPIR_Send_cdesc
>
> implicit none
> ..
> end subroutine MPI_Send_f08ts
>
> Bill Long pointed out problems of the implementation. 1) When users supply a bad argument to MPI_Send(), the compiler complains "No specific match can be found for the generic subprogram call MPI_SEND", instead of pointing out the offending arg.
Maybe Tobias, CC'ed, can shed light on why this is...
> 2) The wrapper is not in a module, which eliminates many of the advantages of using modern Fortran.
Can you explain what you mean by this? There's still lots of advantages for using modern Fortran...
--
Jeff Squyres
jsquyres at cisco.com
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
More information about the mpiwg-fortran
mailing list