d7eaca83fa
What started as a simple ticket ended up reaching the way up to the MPI Forum. It turns out that we are supposed to have MPI_SIZEOF for all Fortran interfaces: mpif.h, the mpi module, and the mpi_f08 module. It further turns out that to properly support MPI_SIZEOF, your Fortran compiler *has* support the INTERFACE keyword and ISO_FORTRAN_ENV. We can't use "ignore TKR" functionality, because the whole point of MPI_SIZEOF is that the implementation knows what type was passed to it ("ignore TKR" functionality, by definition, throws that information away). Hence, we have to have an MPI_SIZEOF interface+implementation for all intrinsic types, kinds, and ranks. This commit therefore adds a perl script that generates both the interfaces and implementations for MPI_SIZEOF in each of mpif.h, the mpi module, and mpi_f08 module (yay consolidation!). The perl script uses the results of some new configure tests: * check if the Fortran compiler supports the INTERFACE keyword * check if the Fortran compiler supports ISO_FORTRAN_ENV * find the max array rank (i.e., dimension) that the compiler supports If the Fortran compiler supports both INTERFACE and ISO_FORTRAN_ENV, then we'll build the MPI_SIZEOF interfaces. If not, we'll skip MPI_SIZEOF in mpif.h and the mpi module. Note that we won't build the mpi_f08 module -- to include the MPI_SIZEOF interfaces -- if the Fortran compiler doesn't support INTERFACE, ISO_FORTRAN_ENV, and a whole bunch of ther modern Fortran stuff. Since MPI_SIZEOF interfaces are now generated by the perl script, this commit also removes all the old MPI_SIZEOF implementations (which were laden with a zillion #if blocks). cmr=v1.8.3 This commit was SVN r32764.
62 строки
2.7 KiB
Fortran
62 строки
2.7 KiB
Fortran
! -*- fortran -*-
|
|
!
|
|
! Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
|
! University Research and Technology
|
|
! Corporation. All rights reserved.
|
|
! Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
! of Tennessee Research Foundation. All rights
|
|
! reserved.
|
|
! Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
! University of Stuttgart. All rights reserved.
|
|
! Copyright (c) 2004-2005 The Regents of the University of California.
|
|
! All rights reserved.
|
|
! Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
|
|
! $COPYRIGHT$
|
|
!
|
|
! Additional copyrights may follow
|
|
!
|
|
! $HEADER$
|
|
!
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!
|
|
! Do ***not*** copy this file to the directory where your Fortran
|
|
! fortran application is compiled unless it is absolutely necessary! Most
|
|
! modern Fortran compilers now support the -I command line flag, which
|
|
! tells the compiler where to find .h files (specifically, this one). For
|
|
! example:
|
|
!
|
|
! shell$ mpifort foo.f -o foo -I$OMPI_HOME/include
|
|
!
|
|
! will probably do the trick (assuming that you have set OMPI_HOME
|
|
! properly).
|
|
!
|
|
! That being said, OMPI's "mpifort" wrapper compiler should
|
|
! automatically include the -I option for you. The following command
|
|
! should be equivalent to the command listed above:
|
|
!
|
|
! shell$ mpifort foo.f -o foo
|
|
!
|
|
! You should not copy this file to your local directory because it is
|
|
! possible that this file will be changed between versions of Open MPI.
|
|
! Indeed, this mpif.h is incompatible with the mpif.f of other
|
|
! implementations of MPI. Using this mpif.h with other implementations
|
|
! of MPI, or with other versions of Open MPI will result in undefined
|
|
! behavior (to include incorrect results, segmentation faults,
|
|
! unexplainable "hanging" in your application, etc.). Always use the
|
|
! -I command line option instead (or let mpifort do it for you).
|
|
!
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
include 'mpif-config.h'
|
|
include 'mpif-constants.h'
|
|
include 'mpif-handles.h'
|
|
@OMPI_MPIF_IO_CONSTANTS_INCLUDE@
|
|
@OMPI_MPIF_IO_HANDLES_INCLUDE@
|
|
include 'mpif-externals.h'
|
|
include 'mpif-sentinels.h'
|
|
include 'mpif-sizeof.h'
|