通过带有gfortran的MPI_f08模块提供MPI Fortran支持

通过带有gfortran的MPI_f08模块提供MPI Fortran支持,fortran,mpi,gfortran,intel-fortran,fortran-iso-c-binding,Fortran,Mpi,Gfortran,Intel Fortran,Fortran Iso C Binding,我有一些Fortran代码,我想与MPI并行。显然,在我使用Fortran的例子中,推荐使用MPI MPICH的方法是通过MPI_f08模块,但我很难让它工作,因为与MPI.mod不同的是,并没有创建相应的mod文件,MPI.mod工作正常,但它不是Fortran standart的最新版本。给我留下的印象是,这是因为gfortran无法构建F08绑定。下面你可以看到我的配置,gfortran和mpich都是通过ubuntu上的apt安装安装的,应该是最新的。有几件事我不确定: 有没有办法让Fo

我有一些Fortran代码,我想与MPI并行。显然,在我使用Fortran的例子中,推荐使用MPI MPICH的方法是通过MPI_f08模块,但我很难让它工作,因为与MPI.mod不同的是,并没有创建相应的mod文件,MPI.mod工作正常,但它不是Fortran standart的最新版本。给我留下的印象是,这是因为gfortran无法构建F08绑定。下面你可以看到我的配置,gfortran和mpich都是通过ubuntu上的apt安装安装的,应该是最新的。有几件事我不确定:

有没有办法让Fortran 2008 MPI语法与gfortran一起工作?从我遇到的情况来看,答案似乎是否定的,但希望有人知道解决办法。我不太精通这一点,所以任何相关链接或更多入门级的解释将不胜感激。 使用不同的编译器会有帮助吗?英特尔编译器*也许?如果合理的话,我宁愿坚持使用gfortran。 也许与目前的标准保持一致并不是什么大不了的事。根据您的经验,通过mpi.mod模块提供支持是否更好?那么我会遇到什么问题呢?我的应用程序没有太大的长远目标,所以如果它现在工作正常的话,一段时间后失去支持也不是什么大问题。 编辑 这似乎是使用过时版本的gfortran的问题。这就把我的问题归结为如何使用gfortran-10构建MPICH

*因此,如果您认为[intel fortran]标记是多余的,请随意删除它 为了清楚起见,这里有我的gfortran和mpich配置

pavel@pavel:~$ gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 
尝试使用mpif90编译我的代码会导致


MPICH要求Fortran编译器支持技术规范29113中的数组描述符,这仅在gfortran GNU 10的最新版本中受支持。 英特尔编译器已经好了一段时间了

请注意,Open MPI不是那么挑剔的w.r.t.TS 29113,也不需要对数组描述符的支持。GNU 7.5可用于生成mpi_f08模块

总之,您有两个选项,即mpi_f08 Fortran模块:

使用符合MPICH期望的Fortran支持w.r.t.TS 29113,例如GNU 10或英特尔编译器 移动到打开MPI
MPICH要求Fortran编译器支持技术规范29113中的数组描述符,这仅在gfortran GNU 10的最新版本中受支持。 英特尔编译器已经好了一段时间了

请注意,Open MPI不是那么挑剔的w.r.t.TS 29113,也不需要对数组描述符的支持。GNU 7.5可用于生成mpi_f08模块

总之,您有两个选项,即mpi_f08 Fortran模块:

使用符合MPICH期望的Fortran支持w.r.t.TS 29113,例如GNU 10或英特尔编译器 移动到打开MPI
你能更新你的GCC版本并用它重建MPICH吗?gfortran 10.2比7.5支持更多的Fortran 2008。我可以试试。“我会告诉你最新情况的。”弗朗西斯卡勒斯很遗憾,这似乎没什么帮助,除非我做错了什么。如何检查构建MPICH时使用的gfortran验证?能否更新GCC版本并使用它重建MPICH?gfortran 10.2比7.5支持更多的Fortran 2008。我可以试试。“我会告诉你最新情况的。”弗朗西斯卡勒斯很遗憾,这似乎没什么帮助,除非我做错了什么。如何检查MPICH构建的gfortran verision是用什么构建的?似乎很有希望,我只有一个新手问题。如何使用gfortran-10构建MPICH?现在,我已经安装了gfortran-V7和gfortran-10-V10。我试图重建它,但mpiexec-verison仍然返回。。。F90:gfortran。。。这意味着它仍然使用-v 7Try configure FC=gfortran-10@Guilles_Gouaillardet你能说得更具体些吗?我不太确定应该把它放在哪里。你需要重建MPICH,在这个过程中,将FC=gfortran-10附加到你的configure命令行。看起来很有希望,我只有一个新手问题。如何使用gfortran-10构建MPICH?现在,我已经安装了gfortran-V7和gfortran-10-V10。我试图重建它,但mpiexec-verison仍然返回。。。F90:gfortran。。。这意味着它仍然使用-v 7Try configure FC=gfortran-10@Guilles_Gouaillardet你能说得更具体些吗?我不太确定应该把它放在哪里。您需要重建MPICH,在这个过程中,将FC=gfortran-10附加到configure命令行。
pavel@pavel:~$ mpiexec --version
HYDRA build details:
    Version:                                 3.3a2
    Release Date:                            Sun Nov 13 09:12:11 MST 2016
    CC:                              gcc   -Wl,-Bsymbolic-functions -Wl,-z,relro 
    CXX:                             g++   -Wl,-Bsymbolic-functions -Wl,-z,relro 
    F77:                             gfortran  -Wl,-Bsymbolic-functions -Wl,-z,relro 
    F90:                             gfortran  -Wl,-Bsymbolic-functions -Wl,-z,relro 
    Configure options:                       '--disable-option-checking' '--prefix=/usr' '--build=x86_64-linux-gnu' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--libexecdir=${prefix}/lib/x86_64-linux-gnu' '--disable-maintainer-mode' '--disable-dependency-tracking' '--with-libfabric' '--enable-shared' '--enable-fortran=all' '--disable-rpath' '--disable-wrapper-rpath' '--sysconfdir=/etc/mpich' '--libdir=/usr/lib/x86_64-linux-gnu' '--includedir=/usr/include/mpich' '--docdir=/usr/share/doc/mpich' '--with-hwloc-prefix=system' '--enable-checkpointing' '--with-hydra-ckpointlib=blcr' 'CPPFLAGS= -Wdate-time -D_FORTIFY_SOURCE=2 -I/build/mpich-O9at2o/mpich-3.3~a2/src/mpl/include -I/build/mpich-O9at2o/mpich-3.3~a2/src/mpl/include -I/build/mpich-O9at2o/mpich-3.3~a2/src/openpa/src -I/build/mpich-O9at2o/mpich-3.3~a2/src/openpa/src -D_REENTRANT -I/build/mpich-O9at2o/mpich-3.3~a2/src/mpi/romio/include' 'CFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong -Wformat -Werror=format-security -O2' 'CXXFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong -Wformat -Werror=format-security -O2' 'FFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong -O2' 'FCFLAGS= -g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong -O2' 'build_alias=x86_64-linux-gnu' 'MPICHLIB_CFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong -Wformat -Werror=format-security' 'MPICHLIB_CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'MPICHLIB_CXXFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong -Wformat -Werror=format-security' 'MPICHLIB_FFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong' 'MPICHLIB_FCFLAGS=-g -O2 -fdebug-prefix-map=/build/mpich-O9at2o/mpich-3.3~a2=. -fstack-protector-strong' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' 'FC=gfortran' 'F77=gfortran' 'MPILIBNAME=mpich' '--cache-file=/dev/null' '--srcdir=.' 'CC=gcc' 'LIBS=' 'MPLLIBNAME=mpl'
    Process Manager:                         pmi
    Launchers available:                     ssh rsh fork slurm ll lsf sge manual persist
    Topology libraries available:            hwloc
    Resource management kernels available:   user slurm ll lsf sge pbs cobalt
    Checkpointing libraries available:       blcr
    Demux engines available:                 poll select

something.f90:2:5:

  use mpi_f08
     1
Fatal Error: Can't open module file ‘mpi_f08.mod’ for reading at (1): File does not exist
compilation terminated.