Fortran uses objects (ompi_f08_mpi_comm_world, mpi_fortran_bottom,, ...) that are defined in C.
Some compilers have different requirements on how these objects should be aligned.
Smaller alignment in C can lead to several confusing warnings from the linker, so try to
find the alignment expected by Fortran compiler, and inform the C compiler.
only define the unique fortran symbol depending on
- CAPS
- PLAIN
- SINGLE_UNDERSCORE
- DOUBLE_UNDERSCORE
and bind the f08 symbol to the uniquely defined C symbol.
Use real data structures to make the code simpler.
(perl script written by Jeff)
@ggouaillardet was right -- we should have put the
ompi_buffer_detach_f08() function in the use-mpi-f08 directory to
begin with. Putting it in the mpif-h directory made it complicated as
to whether the function would be built or not (e.g., whether weak
symbols were supported or not, whether the profiling layer was
disabled or not, ...etc.).
Just put it in the use-mpi-f08 directory and always build it (when the
mpi_f08 module is built, of course), and keep it simple.
Add an mpi_f08-specific implementation for MPI_BUFFER_DETACH.
Per MPI-3.1:3.6, p45, the buffer argument is ignored in
MPI_BUFFER_DETACH for mpif.h and the mpi module. But in the mpi_f08
module, the buffer argument is treated like it is in the C binding.
This commit adds support for MPI_Aint_add and MPI_Aint_diff. These
functions are implemented as macros in C (explicitly allowed by
MPI-3.1). The fortran implementations are a similar mess to the
MPI_Wtime implementations.
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
This is the master version of @ggouaillardet's patch from
open-mpi/ompi-release#148 (there was a minor conflict to fix and
several fuzzings of line numbers).
mpi-f08.F90 includes sizeof_f08.h, so we need to add a Makefile
dependency to ensure that sizeof_f08.h is built first.
Refs trac:4917
This commit was SVN r32789.
The following Trac tickets were found above:
Ticket 4917 --> https://svn.open-mpi.org/trac/ompi/ticket/4917
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.
As noted in the comments of these files, they aren't used. Instead,
the Fortran interfaces for WTICK/WTIME just BIND(C) invoke the
back-end C functions (yay BIND(C)!). Hence, there's no need to keep
these old wrapper files around any more.
cmr=v1.8.3
This commit was SVN r32751.
This fixes some duplicate symbols, once the .o files for the modules
were restored into the library (some compilers need the .o files, some
don't (!)).
Also, remove trailing whitespace. :-)
This commit was SVN r32386.
Fix a copy-n-paste error: the ompi/pompi interfaces should not have
optional ierror arguments. Optional ierror arguments are only used in
the MPI_<foo> interfaces. The ompi/pompi interfaces are the actual
underlying routines (in C, incidentally, which is why they're declared
as BIND(C)), and do not have optional ierror arguments.
Also fix a typo in the BIND(C) name for pompi_win_shared_query_f().
cmr=v1.8.2:reviewer=ggouaillardet
This commit was SVN r32287.
Rever r32246, r32254, and 32255 -- they were fixing side-effects of
the real bug. Real fix coming after this one.
This commit was SVN r32286.
The following SVN revision numbers were found above:
r32246 --> open-mpi/ompi@08d2a1a48d
r32254 --> open-mpi/ompi@232d4dbb7b
Simplify and fix the r32246
cmr=v1.8.2:ticket=trac:4792
This commit was SVN r32254.
The following SVN revision numbers were found above:
r32246 --> open-mpi/ompi@08d2a1a48d
The following Trac tickets were found above:
Ticket 4792 --> https://svn.open-mpi.org/trac/ompi/ticket/4792
ABSoft compilers cannot compile a fortran subroutine
with the BIND(C, NAME="name") modifier *and* argument(s)
with the OPTIONAL modifier
This patch detects this unsupported feature and use
adhoc wrappers if it is missing
cmr=v1.8.2:reviewer=jsquyres
This commit was SVN r32246.
Several problems with MPI_Win_allocate_shared and MPI_Win_shared_query
were discovered in a code review. This commit fixes them:
* Add _cptr versions of both subroutines in mpif-h, use-mpi-tkr, and
use-mpi-ignore-tkr directories
* Fix case of PMPI weak symbols for both C implementations
* Add MPI and PMPI f08 implementations of both subroutines (there is
no _cptr version in the mpi_f08 module)
* Fixed _f08 suffix on the f08 module of both subroutines
cmr=v1.8.2:ticket=trac:4736
This commit was SVN r32162.
The following Trac tickets were found above:
Ticket 4736 --> https://svn.open-mpi.org/trac/ompi/ticket/4736
This file has to be pre-emptively compiled to generate the module, but
then it also has to be included in libmpi_usempif08.
cmr=v1.8.2:ticket=trac:4736
This commit was SVN r32071.
The following Trac tickets were found above:
Ticket 4736 --> https://svn.open-mpi.org/trac/ompi/ticket/4736