MPI_Cart_create错误

时间:2015-01-29 01:44:40

标签: fortran mpi openmpi

我在Fortran工作中遇到基本的mpi_cart_create()函数时遇到了麻烦。

以下代码

  program main
  USE mpi
  implicit none
  integer :: old_comm, new_comm, ndims, ierr
  integer, DIMENSION(1) :: dim_size
  logical ::  reorder
  logical, DIMENSION(1) :: periods

  call MPI_INIT(ierr)
  old_comm = MPI_COMM_WORLD
  ndims = 1            
  dim_size(1) = 4   
  periods(1) = .true.  
  reorder = .true.
  call MPI_CART_CREATE(old_comm, ndims, dim_size, periods, reorder, new_comm, ierr)
  call MPI_Finalize(ierr)

  end program

编译

mpif90 mpitest.f90

运行期间的产量

  

MPI_Cart_create

发生错误      

关于传播者MPI_COMM_WORLD

     

MPI_ERR_OTHER:列表中未知的已知错误

     

MPI_ERRORS_ARE_FATAL:您的MPI作业现在将中止

这看起来很简单,但是有人认出这个问题吗?

编辑:我更新了代码(我之前有点急于减少代码,感谢您提出这些问题)以纠正下面提到的问题。我想我可能搞砸了MPI安装,因为代码将在使用

编译时运行
 (when using `use mpi`)
 mpif90 mpitest3.f90
 mpirun  -np 4  ./a.out

OR

 (when using `include "mpif.h"`)
 mpifort mpitest.f90 
 orterun  -np 4  ./a.out

如果我尝试使用use mpi语句使用mpifort进行编译

PI_CART_CREATE(old_comm, ndims, dim_size, periods, reorder, new_comm, ierr)
     

错误:通用没有特定的子程序   ' MPI_CART_CREATE'在(1)

如果我混合编译器并运行调用(例如使用mpif90编译并使用orterun运行),我得到

  

PMPI_Cart_create中的致命错误:参数无效,错误堆栈:   PMPI_Cart_create(315).....:MPI_Cart_create(MPI_COMM_WORLD,ndims = 1,   dims = 0x7fff26671130,句点= 0x1c6e300,reorder = 1,   comm_cart = 0x7fff26671124)MPIR_Cart_create_impl失败(191):   MPIR_Cart_create(55)......:通信器(1)的大小较小   比笛卡尔拓扑的大小(4)

即使openmpi的文档声明命令(至少orterun和mpirun)应该是同义词。

1 个答案:

答案 0 :(得分:3)

您的问题是您安装了Open MPI和MPICH(或其他基于MPICH的实现)。 mpifort是Open MPI中的通用Fortran编译器包装器,它似乎从MPICH中选择模块文件,因此在使用use mpi编译代码时出错。您的mpirun肯定来自MPICH,无法正常启动Open MPI可执行文件。来自Open MPI的orterun也是如此,它无法正确启动MPICH可执行文件。在这两种情况下,可执行文件都成为单例,每个进程都有自己的MPI_COMM_WORLD,大小为1,因此无法创建具有4个等级的笛卡尔虚拟拓扑。

解决方案是首先从系统中清除所有MPI实现,然后从同一实现安装运行时和开发数据包,例如,打开MPI。