From 72290708b653bd6bb0b96369c8e7086e244af221 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Sun, 23 Oct 2016 11:27:41 +0900 Subject: [PATCH 1/5] fortran/use-mpi-ignore-trk: fix typo in MPI_File_read_ordered_begin interface (cherry picked from commit open-mpi/ompi@e02dc1e63790ddc6b02616c19888d32aebded637) Signed-off-by: Gilles Gouaillardet --- .../mpi-ignore-tkr-file-interfaces.h.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in index bc5d667bd4e..b2de1787db0 100644 --- a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in +++ b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in @@ -1002,27 +1002,27 @@ end interface interface MPI_File_read_ordered_begin -subroutine MPI_File_read_ord_begin(fh, buf, count, datatype, ierror) +subroutine MPI_File_read_ordered_begin(fh, buf, count, datatype, ierror) integer, intent(in) :: fh @OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf @OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf integer, intent(in) :: count integer, intent(in) :: datatype integer, intent(out) :: ierror -end subroutine MPI_File_read_ord_begin +end subroutine MPI_File_read_ordered_begin end interface interface PMPI_File_read_ordered_begin -subroutine PMPI_File_read_ord_begin(fh, buf, count, datatype, ierror) +subroutine PMPI_File_read_ordered_begin(fh, buf, count, datatype, ierror) integer, intent(in) :: fh @OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf @OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf integer, intent(in) :: count integer, intent(in) :: datatype integer, intent(out) :: ierror -end subroutine PMPI_File_read_ord_begin +end subroutine PMPI_File_read_ordered_begin end interface From 54713a83f192d2f53b6c4ec12a7c8f0266043f66 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Sun, 23 Oct 2016 11:30:07 +0900 Subject: [PATCH 2/5] fortran/use-mpi-ignore-tkr: fix typo in MPI_File_write_at_all_begin interface (cherry picked from commit open-mpi/ompi@e2769e4343312b47f0b24549b1e9e51878fd044d) Signed-off-by: Gilles Gouaillardet --- .../mpi-ignore-tkr-file-interfaces.h.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in index b2de1787db0..b48f9dc2070 100644 --- a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in +++ b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h.in @@ -1467,7 +1467,7 @@ end interface interface MPI_File_write_at_all_begin -subroutine MPI_File_wr_at_all_begin(fh, offset, buf, count, datatype& +subroutine MPI_File_write_at_all_begin(fh, offset, buf, count, datatype& , ierror) include 'mpif-config.h' integer, intent(in) :: fh @@ -1477,13 +1477,13 @@ subroutine MPI_File_wr_at_all_begin(fh, offset, buf, count, datatype& integer, intent(in) :: count integer, intent(in) :: datatype integer, intent(out) :: ierror -end subroutine MPI_File_wr_at_all_begin +end subroutine MPI_File_write_at_all_begin end interface interface PMPI_File_write_at_all_begin -subroutine PMPI_File_wr_at_all_begin(fh, offset, buf, count, datatype& +subroutine PMPI_File_write_at_all_begin(fh, offset, buf, count, datatype& , ierror) include 'mpif-config.h' integer, intent(in) :: fh @@ -1493,7 +1493,7 @@ subroutine PMPI_File_wr_at_all_begin(fh, offset, buf, count, datatype& integer, intent(in) :: count integer, intent(in) :: datatype integer, intent(out) :: ierror -end subroutine PMPI_File_wr_at_all_begin +end subroutine PMPI_File_write_at_all_begin end interface From 3e01b96520bffc7dedba43f10b3c3584a6e9b686 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Mon, 24 Oct 2016 09:48:17 +0900 Subject: [PATCH 3/5] fortran: correctly defines MPI_DISPLACEMENT_CURRENT with KIND=MPI_OFFSET_KIND and remove unused ompi/include/mpif-mpi-io.h (cherry picked from commit open-mpi/ompi@055df6f7c650561cb1d14601cb7ed28d95c21a11) Signed-off-by: Gilles Gouaillardet --- ompi/include/mpif-mpi-io.h | 85 ------------------------------------- ompi/include/mpif-values.pl | 28 +++++++++--- 2 files changed, 22 insertions(+), 91 deletions(-) delete mode 100644 ompi/include/mpif-mpi-io.h diff --git a/ompi/include/mpif-mpi-io.h b/ompi/include/mpif-mpi-io.h deleted file mode 100644 index 6ffa9986078..00000000000 --- a/ompi/include/mpif-mpi-io.h +++ /dev/null @@ -1,85 +0,0 @@ -! -*- 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 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$ mpif77 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 "mpif77" wrapper compiler should -! automatically include the -I option for you. The following command -! should be equivalent to the command listed above: -! -! shell$ mpif77 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 mpif77 do it for you). -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! -! This file is included as a back-end file to both mpif.h (i.e., the -! standardized MPI Fortran header file) and a bunch of the MPI -! Fortran 90 subroutine implementations found in ompi/mpi/f90. -! -! This file contains the output from configure that is relevant for -! Fortran applications (both 77 and 90) and a few values that are -! necessary to compile the F90 module (e.g., MPI_STATUS_SIZE). -! - - integer MPI_FILE_NULL - integer MPI_SEEK_SET, MPI_SEEK_CUR, MPI_SEEK_END - integer MPI_MODE_CREATE - integer MPI_MODE_RDONLY, MPI_MODE_WRONLY, MPI_MODE_RDWR - integer MPI_MODE_DELETE_ON_CLOSE, MPI_MODE_UNIQUE_OPEN - integer MPI_MODE_EXCL, MPI_MODE_APPEND, MPI_MODE_SEQUENTIAL - integer MPI_DISPLACEMENT_CURRENT - - parameter (MPI_FILE_NULL=0) - parameter (MPI_SEEK_SET=600) - parameter (MPI_SEEK_CUR=602) - parameter (MPI_SEEK_END=604) - parameter (MPI_MODE_CREATE=1) - parameter (MPI_MODE_RDONLY=2) - parameter (MPI_MODE_WRONLY=4) - parameter (MPI_MODE_RDWR=8) - parameter (MPI_MODE_DELETE_ON_CLOSE=16) - parameter (MPI_MODE_UNIQUE_OPEN=32) - parameter (MPI_MODE_EXCL=64) - parameter (MPI_MODE_APPEND=128) - parameter (MPI_MODE_SEQUENTIAL=256) - parameter (MPI_DISPLACEMENT_CURRENT=-54278278) diff --git a/ompi/include/mpif-values.pl b/ompi/include/mpif-values.pl index 000e1cc869b..c52532af108 100755 --- a/ompi/include/mpif-values.pl +++ b/ompi/include/mpif-values.pl @@ -86,6 +86,7 @@ sub write_file { #---------------------------------------------------------------------------- my $handles; +my $lhandles; $handles->{MPI_COMM_WORLD} = 0; $handles->{MPI_COMM_SELF} = 1; @@ -398,7 +399,9 @@ sub write_file { $io_constants->{MPI_MODE_EXCL} = 64; $io_constants->{MPI_MODE_APPEND} = 128; $io_constants->{MPI_MODE_SEQUENTIAL} = 256; -$io_constants->{MPI_DISPLACEMENT_CURRENT} = -54278278; + +my $lio_constants; +$lio_constants->{MPI_DISPLACEMENT_CURRENT} = -54278278; #---------------------------------------------------------------------------- @@ -421,6 +424,8 @@ sub write_file { ! All rights reserved. ! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. ! Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. +! Copyright (c) 2016 Research Organization for Information Science +! and Technology (RIST). All rights reserved. ! $COPYRIGHT$ ! ! Additional copyrights may follow @@ -431,26 +436,32 @@ sub write_file { '; sub write_fortran_file { - my ($header, $vals, $file) = @_; + my ($header, $vals, $lvals, $file) = @_; foreach my $key (sort(keys(%{$vals}))) { $header .= " integer $key\n"; } + foreach my $key (sort(keys(%{$lvals}))) { + $header .= " integer(KIND=MPI_OFFSET_KIND) $key\n"; + } $header .= "\n"; foreach my $key (sort(keys(%{$vals}))) { $header .= " parameter ($key=$vals->{$key})\n"; } + foreach my $key (sort(keys(%{$lvals}))) { + $header .= " parameter ($key=$lvals->{$key})\n"; + } write_file($file, $header); } -write_fortran_file($header, $handles, +write_fortran_file($header, $handles, {}, "$topdir/ompi/include/mpif-handles.h"); -write_fortran_file($header, $constants, +write_fortran_file($header, $constants, {}, "$topdir/ompi/include/mpif-constants.h"); -write_fortran_file($header, $io_handles, +write_fortran_file($header, $io_handles, {}, "$topdir/ompi/include/mpif-io-handles.h"); -write_fortran_file($header, $io_constants, +write_fortran_file($header, $io_constants, $lio_constants, "$topdir/ompi/include/mpif-io-constants.h"); #---------------------------------------------------------------------------- @@ -478,6 +489,8 @@ sub write_fortran_file { * Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. * Copyright (c) 2009-2012 Los Alamos National Security, LLC. * All rights reserved. + * Copyright (c) 2016 Research Organization for Information Science + * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -502,6 +515,9 @@ sub write_fortran_file { foreach my $key (sort(keys(%{$io_constants}))) { $output .= "#define OMPI_$key $io_constants->{$key}\n"; } +foreach my $key (sort(keys(%{$lio_constants}))) { + $output .= "#define OMPI_$key $lio_constants->{$key}\n"; +} $output .= "\n"; foreach my $key (sort(keys(%{$io_handles}))) { $output .= "#define OMPI_$key $io_handles->{$key}\n"; From f27d0db4ed9c4fecbfdab7291231bfa002025c50 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Mon, 24 Oct 2016 09:04:29 +0900 Subject: [PATCH 4/5] man: fix typos in MPI_Info_get_{nkeys,nthkey} Thanks Nicolas Joly for the patch (cherry picked from commit open-mpi/ompi@98f62690f1c9ea82bc8e5c86ed31ee440c36616e) Signed-off-by: Gilles Gouaillardet --- ompi/mpi/man/man3/MPI_Info_get_nkeys.3in | 2 +- ompi/mpi/man/man3/MPI_Info_get_nthkey.3in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ompi/mpi/man/man3/MPI_Info_get_nkeys.3in b/ompi/mpi/man/man3/MPI_Info_get_nkeys.3in index 735e5db2832..bad0c34ee7e 100644 --- a/ompi/mpi/man/man3/MPI_Info_get_nkeys.3in +++ b/ompi/mpi/man/man3/MPI_Info_get_nkeys.3in @@ -60,6 +60,6 @@ MPI_Info_get .br MPI_Info_get_nthkey .br -MPI_Info_get_valueln +MPI_Info_get_valuelen .br diff --git a/ompi/mpi/man/man3/MPI_Info_get_nthkey.3in b/ompi/mpi/man/man3/MPI_Info_get_nthkey.3in index 1137337e52d..11c9291914a 100644 --- a/ompi/mpi/man/man3/MPI_Info_get_nthkey.3in +++ b/ompi/mpi/man/man3/MPI_Info_get_nthkey.3in @@ -65,6 +65,6 @@ MPI_Info_get .br MPI_Info_get_nkeys .br -MPI_Info_get_valueln +MPI_Info_get_valuelen .br From cc7e72b228f93667cd7eca9eb5c51a108201c4be Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Wed, 9 Nov 2016 13:07:45 -0500 Subject: [PATCH 5/5] NEWS: Add bullet about Fortran ABI changes Per the bullet added to NEWS, these ABI changes were made to correct erroneous Fortran bindings. It is exceedingly unlikely that anyone was using them, because they would have complained that the names/types were outright wrong. Hence, it's safe to make these changes, even though they're not backwards compatible with v2.0.0 and v2.0.1. Signed-off-by: Jeff Squyres --- NEWS | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/NEWS b/NEWS index e71d5cf20c5..5c41e9ee59a 100644 --- a/NEWS +++ b/NEWS @@ -53,6 +53,21 @@ included in the vX.Y.Z section and be denoted as: (** also appeared: A.B.C) -- indicating that this item was previously included in release version vA.B.C. +2.0.2 -- TBD +----------------------- + +- The following backwards-incompatible changes to the Fortran API were + made. They were made because Open MPI's Fortran bindings for these + were incorrect; any MPI applications using them were therefore also + erroneous, and not subject to backwards compatibility constraints. + - All Fortran bindings: + - The type of MPI_DISPLACEMENT_CURRENT was changed from INTEGER to + INTEGER(KIND=MPI_OFFSET_KIND) + - Fortran "use mpi" module: + - MPI_File_wr_at_all_begin -> MPI_File_write_at_all_begin + - MPI_File_read_ord_begin -> MPI_File_read_ordered_begin + + 2.0.1 -- 2 September 2016 -----------------------