openmpi: fixes for NAG compiler (#17073)
* openmpi: fixes for NAG compiler * openmpi: more fixes
This commit is contained in:
parent
e90c229dab
commit
eca08c77e3
7 changed files with 700 additions and 21 deletions
|
@ -4,6 +4,7 @@
|
|||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
import itertools
|
||||
import os
|
||||
import sys
|
||||
import llnl.util.tty as tty
|
||||
|
@ -157,12 +158,26 @@ class Openmpi(AutotoolsPackage):
|
|||
patch('btl_vader.patch', when='@3.0.1:3.0.2')
|
||||
patch('btl_vader.patch', when='@3.1.0:3.1.2')
|
||||
|
||||
# Reported upstream: https://github.com/open-mpi/ompi/pull/6378
|
||||
# Make NAG compiler pass the -pthread option to the linker:
|
||||
# https://github.com/open-mpi/ompi/pull/6378
|
||||
# We support only versions based on Libtool 2.4.6.
|
||||
patch('nag_ltmain_1.patch', when='@2.1.4:2.1.999,3.0.1:4%nag')
|
||||
patch('nag_ltmain_2.patch', when='@2.1.2:2.1.3,3.0.0%nag')
|
||||
patch('nag_ltmain_3.patch', when='@2.0.0:2.1.1%nag')
|
||||
patch('nag_ltmain_4.patch', when='@1.10.4:1.10.999%nag')
|
||||
patch('nag_pthread/2.1.4_2.1.999_3.0.1_4.patch', when='@2.1.4:2.1.999,3.0.1:4%nag')
|
||||
patch('nag_pthread/2.1.2_2.1.3_3.0.0.patch', when='@2.1.2:2.1.3,3.0.0%nag')
|
||||
patch('nag_pthread/2.0.0_2.1.1.patch', when='@2.0.0:2.1.1%nag')
|
||||
patch('nag_pthread/1.10.4_1.10.999.patch', when='@1.10.4:1.10.999%nag')
|
||||
|
||||
# Fix MPI_Sizeof() in the "mpi" Fortran module for compilers that do not
|
||||
# support "IGNORE TKR" functionality (e.g. NAG).
|
||||
# The issue has been resolved upstream in two steps:
|
||||
# 1) https://github.com/open-mpi/ompi/pull/2294
|
||||
# 2) https://github.com/open-mpi/ompi/pull/5099
|
||||
# The first one was applied starting version v3.0.0 and backported to
|
||||
# v1.10. A subset with relevant modifications is applicable starting
|
||||
# version 1.8.4.
|
||||
patch('use_mpi_tkr_sizeof/step_1.patch', when='@1.8.4:1.10.6,2:2.999')
|
||||
# The second patch was applied starting version v4.0.0 and backported to
|
||||
# v2.x, v3.0.x, and v3.1.x.
|
||||
patch('use_mpi_tkr_sizeof/step_2.patch', when='@1.8.4:2.1.3,3:3.0.1')
|
||||
|
||||
variant(
|
||||
'fabrics',
|
||||
|
@ -192,7 +207,8 @@ class Openmpi(AutotoolsPackage):
|
|||
description='Enable MPI_THREAD_MULTIPLE support')
|
||||
variant('cuda', default=False, description='Enable CUDA support')
|
||||
variant('pmi', default=False, description='Enable PMI support')
|
||||
variant('runpath', default=True, description='Enable wrapper runpath')
|
||||
variant('wrapper-rpath', default=True,
|
||||
description='Enable rpath support in the wrappers')
|
||||
variant('cxx', default=False, description='Enable C++ MPI bindings')
|
||||
variant('cxx_exceptions', default=False, description='Enable C++ Exception support')
|
||||
variant('gpfs', default=True, description='Enable GPFS support (if present)')
|
||||
|
@ -274,6 +290,9 @@ class Openmpi(AutotoolsPackage):
|
|||
conflicts('fabrics=libfabric', when='@:1.8') # libfabric support was added in 1.10.0
|
||||
# It may be worth considering making libfabric an exclusive fabrics choice
|
||||
|
||||
# RPATH support in the wrappers was added in 1.7.4
|
||||
conflicts('+wrapper-rpath', when='@:1.7.3')
|
||||
|
||||
def url_for_version(self, version):
|
||||
url = "http://www.open-mpi.org/software/ompi/v{0}/downloads/openmpi-{1}.tar.bz2"
|
||||
return url.format(version.up_to(2), version)
|
||||
|
@ -369,12 +388,10 @@ def configure_args(self):
|
|||
'--disable-silent-rules'
|
||||
]
|
||||
|
||||
# Add extra_rpaths dirs from compilers.yaml into link wrapper
|
||||
rpaths = [self.compiler.cc_rpath_arg + path
|
||||
for path in self.compiler.extra_rpaths]
|
||||
config_args.extend([
|
||||
'--with-wrapper-ldflags={0}'.format(' '.join(rpaths))
|
||||
])
|
||||
# All rpath flags should be appended with self.compiler.cc_rpath_arg.
|
||||
# Later, we might need to update share/openmpi/mpic++-wrapper-data.txt
|
||||
# and mpifort-wrapper-data.txt (see filter_rpaths()).
|
||||
wrapper_ldflags = []
|
||||
|
||||
if '+atomics' in spec:
|
||||
config_args.append('--enable-builtin-atomics')
|
||||
|
@ -418,12 +435,6 @@ def configure_args(self):
|
|||
if 'fabrics=auto' not in spec:
|
||||
config_args.extend(self.with_or_without('fabrics',
|
||||
activation_value='prefix'))
|
||||
# The wrappers fail to automatically link libfabric. This will cause
|
||||
# undefined references unless we add the appropriate flags.
|
||||
if 'fabrics=libfabric' in spec:
|
||||
config_args.append('--with-wrapper-ldflags=-L{0} -Wl,-rpath={0}'
|
||||
.format(spec['libfabric'].prefix.lib))
|
||||
config_args.append('--with-wrapper-libs=-lfabric')
|
||||
|
||||
# Schedulers
|
||||
if 'schedulers=auto' not in spec:
|
||||
|
@ -499,12 +510,24 @@ def configure_args(self):
|
|||
else:
|
||||
config_args.append('--without-cuda')
|
||||
|
||||
if '+runpath' in spec:
|
||||
if '+wrapper-rpath' in spec:
|
||||
config_args.append('--enable-wrapper-rpath')
|
||||
config_args.append('--enable-wrapper-runpath')
|
||||
|
||||
# Disable new dynamic tags in the wrapper (--disable-new-dtags)
|
||||
# In the newer versions this can be done with a configure option
|
||||
# (for older versions, we rely on filter_compiler_wrappers() and
|
||||
# filter_pc_files()):
|
||||
if spec.satisfies('@3.0.5:'):
|
||||
config_args.append('--disable-wrapper-runpath')
|
||||
|
||||
# Add extra_rpaths and implicit_rpaths into the wrappers.
|
||||
wrapper_ldflags.extend([
|
||||
self.compiler.cc_rpath_arg + path
|
||||
for path in itertools.chain(
|
||||
self.compiler.extra_rpaths,
|
||||
self.compiler.implicit_rpaths())])
|
||||
else:
|
||||
config_args.append('--disable-wrapper-rpath')
|
||||
config_args.append('--disable-wrapper-runpath')
|
||||
|
||||
if spec.satisfies('@:4'):
|
||||
if '+cxx' in spec:
|
||||
|
@ -517,8 +540,58 @@ def configure_args(self):
|
|||
else:
|
||||
config_args.append('--disable-cxx-exceptions')
|
||||
|
||||
if wrapper_ldflags:
|
||||
config_args.append(
|
||||
'--with-wrapper-ldflags={0}'.format(' '.join(wrapper_ldflags)))
|
||||
|
||||
return config_args
|
||||
|
||||
@when('+wrapper-rpath')
|
||||
@run_after('install')
|
||||
def filter_rpaths(self):
|
||||
|
||||
def filter_lang_rpaths(lang_tokens, rpath_arg):
|
||||
if self.compiler.cc_rpath_arg == rpath_arg:
|
||||
return
|
||||
|
||||
files = find(self.spec.prefix.share.openmpi,
|
||||
['*{0}-wrapper-data*'.format(t) for t in lang_tokens])
|
||||
files.extend(find(self.spec.prefix.lib.pkgconfig,
|
||||
['ompi-{0}.pc'.format(t) for t in lang_tokens]))
|
||||
|
||||
x = FileFilter(*[f for f in files if not os.path.islink(f)])
|
||||
|
||||
# Replace self.compiler.cc_rpath_arg, which have been added as
|
||||
# '--with-wrapper-ldflags', with rpath_arg in the respective
|
||||
# language-specific wrappers and pkg-config files.
|
||||
x.filter(self.compiler.cc_rpath_arg, rpath_arg,
|
||||
string=True, backup=False)
|
||||
|
||||
if self.spec.satisfies('@:1.10.3,2:2.1.1'):
|
||||
# Replace Libtool-style RPATH prefixes '-Wl,-rpath -Wl,' with
|
||||
# rpath_arg for old version of OpenMPI, which assumed that CXX
|
||||
# and FC had the same prefixes as CC.
|
||||
x.filter('-Wl,-rpath -Wl,', rpath_arg,
|
||||
string=True, backup=False)
|
||||
|
||||
filter_lang_rpaths(['c++', 'CC', 'cxx'], self.compiler.cxx_rpath_arg)
|
||||
filter_lang_rpaths(['fort', 'f77', 'f90'], self.compiler.fc_rpath_arg)
|
||||
|
||||
@when('@:3.0.4+wrapper-rpath')
|
||||
@run_after('install')
|
||||
def filter_pc_files(self):
|
||||
files = find(self.spec.prefix.lib.pkgconfig, '*.pc')
|
||||
x = FileFilter(*[f for f in files if not os.path.islink(f)])
|
||||
|
||||
# Remove this linking flag if present (it turns RPATH into RUNPATH)
|
||||
x.filter('{0}--enable-new-dtags'.format(self.compiler.linker_arg), '',
|
||||
string=True, backup=False)
|
||||
|
||||
# NAG compiler is usually mixed with GCC, which has a different
|
||||
# prefix for linker arguments.
|
||||
if self.compiler.name == 'nag':
|
||||
x.filter('-Wl,--enable-new-dtags', '', string=True, backup=False)
|
||||
|
||||
@run_after('install')
|
||||
def delete_mpirun_mpiexec(self):
|
||||
# The preferred way to run an application when Slurm is the
|
||||
|
|
|
@ -0,0 +1,584 @@
|
|||
--- a/ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h
|
||||
+++ b/ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h
|
||||
@@ -1650,570 +1650,6 @@ end subroutine MPI_Request_get_status
|
||||
end interface
|
||||
|
||||
|
||||
-interface MPI_Sizeof
|
||||
-
|
||||
-subroutine MPI_Sizeof0DCH(x, size, ierror)
|
||||
- character, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DL(x, size, ierror)
|
||||
- logical, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DI1(x, size, ierror)
|
||||
- integer*1, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DI2(x, size, ierror)
|
||||
- integer*2, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DI4(x, size, ierror)
|
||||
- integer*4, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DI8(x, size, ierror)
|
||||
- integer*8, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DR4(x, size, ierror)
|
||||
- real*4, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DR8(x, size, ierror)
|
||||
- real*8, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DC8(x, size, ierror)
|
||||
- complex*8, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof0DC16(x, size, ierror)
|
||||
- complex*16, intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof0DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DCH(x, size, ierror)
|
||||
- character, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DL(x, size, ierror)
|
||||
- logical, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DI1(x, size, ierror)
|
||||
- integer*1, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DI2(x, size, ierror)
|
||||
- integer*2, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DI4(x, size, ierror)
|
||||
- integer*4, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DI8(x, size, ierror)
|
||||
- integer*8, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DR4(x, size, ierror)
|
||||
- real*4, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DR8(x, size, ierror)
|
||||
- real*8, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DC8(x, size, ierror)
|
||||
- complex*8, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof1DC16(x, size, ierror)
|
||||
- complex*16, dimension(*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof1DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DCH(x, size, ierror)
|
||||
- character, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DL(x, size, ierror)
|
||||
- logical, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DI1(x, size, ierror)
|
||||
- integer*1, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DI2(x, size, ierror)
|
||||
- integer*2, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DI4(x, size, ierror)
|
||||
- integer*4, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DI8(x, size, ierror)
|
||||
- integer*8, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DR4(x, size, ierror)
|
||||
- real*4, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DR8(x, size, ierror)
|
||||
- real*8, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DC8(x, size, ierror)
|
||||
- complex*8, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof2DC16(x, size, ierror)
|
||||
- complex*16, dimension(1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof2DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DCH(x, size, ierror)
|
||||
- character, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DL(x, size, ierror)
|
||||
- logical, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DI1(x, size, ierror)
|
||||
- integer*1, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DI2(x, size, ierror)
|
||||
- integer*2, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DI4(x, size, ierror)
|
||||
- integer*4, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DI8(x, size, ierror)
|
||||
- integer*8, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DR4(x, size, ierror)
|
||||
- real*4, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DR8(x, size, ierror)
|
||||
- real*8, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DC8(x, size, ierror)
|
||||
- complex*8, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof3DC16(x, size, ierror)
|
||||
- complex*16, dimension(1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof3DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DCH(x, size, ierror)
|
||||
- character, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DL(x, size, ierror)
|
||||
- logical, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DI1(x, size, ierror)
|
||||
- integer*1, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DI2(x, size, ierror)
|
||||
- integer*2, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DI4(x, size, ierror)
|
||||
- integer*4, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DI8(x, size, ierror)
|
||||
- integer*8, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DR4(x, size, ierror)
|
||||
- real*4, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DR8(x, size, ierror)
|
||||
- real*8, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DC8(x, size, ierror)
|
||||
- complex*8, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof4DC16(x, size, ierror)
|
||||
- complex*16, dimension(1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof4DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DCH(x, size, ierror)
|
||||
- character, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DL(x, size, ierror)
|
||||
- logical, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DI1(x, size, ierror)
|
||||
- integer*1, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DI2(x, size, ierror)
|
||||
- integer*2, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DI4(x, size, ierror)
|
||||
- integer*4, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DI8(x, size, ierror)
|
||||
- integer*8, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DR4(x, size, ierror)
|
||||
- real*4, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DR8(x, size, ierror)
|
||||
- real*8, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DC8(x, size, ierror)
|
||||
- complex*8, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof5DC16(x, size, ierror)
|
||||
- complex*16, dimension(1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof5DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DCH(x, size, ierror)
|
||||
- character, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DL(x, size, ierror)
|
||||
- logical, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DI1(x, size, ierror)
|
||||
- integer*1, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DI2(x, size, ierror)
|
||||
- integer*2, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DI4(x, size, ierror)
|
||||
- integer*4, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DI8(x, size, ierror)
|
||||
- integer*8, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DR4(x, size, ierror)
|
||||
- real*4, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DR8(x, size, ierror)
|
||||
- real*8, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DC8(x, size, ierror)
|
||||
- complex*8, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof6DC16(x, size, ierror)
|
||||
- complex*16, dimension(1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof6DC16
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DCH(x, size, ierror)
|
||||
- character, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DCH
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DL(x, size, ierror)
|
||||
- logical, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DL
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DI1(x, size, ierror)
|
||||
- integer*1, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DI1
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DI2(x, size, ierror)
|
||||
- integer*2, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DI2
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DI4(x, size, ierror)
|
||||
- integer*4, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DI4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DI8(x, size, ierror)
|
||||
- integer*8, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DI8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DR4(x, size, ierror)
|
||||
- real*4, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DR4
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DR8(x, size, ierror)
|
||||
- real*8, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DR8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DC8(x, size, ierror)
|
||||
- complex*8, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DC8
|
||||
-
|
||||
-
|
||||
-subroutine MPI_Sizeof7DC16(x, size, ierror)
|
||||
- complex*16, dimension(1,1,1,1,1,1,*), intent(in) :: x
|
||||
- integer, intent(out) :: size
|
||||
- integer, intent(out) :: ierror
|
||||
-end subroutine MPI_Sizeof7DC16
|
||||
-
|
||||
-end interface
|
||||
-
|
||||
-
|
||||
interface MPI_Start
|
||||
|
||||
subroutine MPI_Start(request, ierror)
|
||||
--- a/ompi/mpi/fortran/use-mpi-tkr/mpi.F90
|
||||
+++ b/ompi/mpi/fortran/use-mpi-tkr/mpi.F90
|
||||
@@ -50,4 +50,8 @@ module mpi
|
||||
|
||||
include "mpi-f90-interfaces.h"
|
||||
|
||||
+#if OMPI_FORTRAN_BUILD_SIZEOF
|
||||
+ include "mpi-tkr-sizeof.h"
|
||||
+#endif
|
||||
+
|
||||
end module mpi
|
|
@ -0,0 +1,22 @@
|
|||
--- a/ompi/mpi/fortran/configure-fortran-output.h.in
|
||||
+++ b/ompi/mpi/fortran/configure-fortran-output.h.in
|
||||
@@ -47,6 +47,8 @@
|
||||
! Line 2 of the ignore TKR syntax
|
||||
#define OMPI_FORTRAN_IGNORE_TKR_TYPE @OMPI_FORTRAN_IGNORE_TKR_TYPE@
|
||||
|
||||
+
|
||||
+#define OMPI_FORTRAN_BUILD_SIZEOF @OMPI_FORTRAN_BUILD_SIZEOF@
|
||||
! Integers
|
||||
|
||||
#define OMPI_HAVE_FORTRAN_INTEGER1 @OMPI_HAVE_FORTRAN_INTEGER1@
|
||||
--- a/ompi/mpi/fortran/use-mpi-tkr/Makefile.in
|
||||
+++ b/ompi/mpi/fortran/use-mpi-tkr/Makefile.in
|
||||
@@ -2023,6 +2023,8 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-local
|
||||
@OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS_TRUE@mpi.lo: $(top_builddir)/ompi/mpi/fortran/configure-fortran-output.h
|
||||
@OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS_TRUE@mpi.lo: mpi-f90-cptr-interfaces.F90
|
||||
|
||||
+@BUILD_FORTRAN_SIZEOF_TRUE@@OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS_TRUE@mpi.lo: mpi-tkr-sizeof.h
|
||||
+
|
||||
@OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS_TRUE@mpi-tkr-sizeof.h: $(top_builddir)/config.status
|
||||
@OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS_TRUE@mpi-tkr-sizeof.h: $(sizeof_pl)
|
||||
@OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS_TRUE@mpi-tkr-sizeof.h:
|
Loading…
Reference in a new issue