You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mvapich 3.0 Fortran90接口编译代码遇类型不匹配问题求助

问题:Mvapich-3.0 + GFortran ≥10 下Fortran并行代码类型不匹配错误

问题场景

使用Mvapich-3.0构建F90并行代码,当GFortran版本≥10时,编译始终报类型不匹配错误。

编译命令

mpif90 -I/opt/mvapich/include -c reduce.f90

错误信息

reduce.f90:27:27:

   12 |         call MPI_Allreduce(dv_src, dv, vlen, MPI_DOUBLE_PRECISION, &
      |                           2
......
   27 |         call MPI_Allreduce(zv_src, zv, vlen, MPI_DOUBLE_COMPLEX, &
      |                           1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (COMPLEX(8)/REAL(8)).
reduce.f90:27:35:

   12 |         call MPI_Allreduce(dv_src, dv, vlen, MPI_DOUBLE_PRECISION, &
      |                                   2
......
   27 |         call MPI_Allreduce(zv_src, zv, vlen, MPI_DOUBLE_COMPLEX, &
      |                                   1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (COMPLEX(8)/REAL(8)).

源码示例(reduce.f90)

subroutine reduceData_Dbl(dv, dv_src, vlen)
        include 'mpif.h'
!       ----------------------------------------------------------------
        double precision :: dv(*), dv_src(*)
        integer          :: vlen

        integer          :: i, ierr
!       ----------------------------------------------------------------
        call MPI_Allreduce(dv_src, dv, vlen, MPI_DOUBLE_PRECISION, &
                 MPI_SUM, MPI_COMM_WORLD, ierr)
        end

        subroutine reduceData_Cpx(zv, zv_src, vlen)
        include 'mpif.h'
!       ----------------------------------------------------------------
        double complex :: zv(*), zv_src(*)
        integer        :: vlen

        integer        :: i, ierr
!       ----------------------------------------------------------------
        call MPI_Allreduce(zv_src, zv, vlen, MPI_DOUBLE_COMPLEX, &
                 MPI_SUM, MPI_COMM_WORLD, ierr)
        end

已尝试的方法与困境

  • 添加-fallow-argument-mismatch选项可绕过错误,但GFortran文档强烈不建议使用该选项,且BerkeleyGW这类大型软件即使加此选项也无法绕过错误。
  • 按常规方法用use mpi替换include 'mpif.h'以获取F90接口,但在Mvapich-3.0下无效,错误依然存在。
  • 仅use mpi_f08能解决错误,但需要将大量MPI句柄从integer类型改为新的派生类型(如TYPE(MPI_Comm)、TYPE(MPI_Group)等),对大型软件来说修改量极大。

疑问

  1. 是否有更简便的方法解决该类型不匹配错误?
  2. 理论上use mpi应提供完整的F90接口且无需修改MPI句柄类型,但测试无效,是否操作有误?

内容的提问来源于stack exchange,提问作者Tung-Han Hsieh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:46:15