Windows和Ubuntu中mpiexec的不同行为

时间:2019-06-25 19:33:50

标签: eclipse mpi gfortran

我在Fortran(program.f)中有一个代码,并且已经在\ ubuntu 16和Windows 7中使用Eclipse对其进行了编译。

Ubuntu的Eclipse配置如下:

GNU Fortran Compiler: gfortran
Include paths(-l)   : /usr/lib/openmpi/include
GNU Fortran Linker  : mpif90
Tool Chain Editor   : GCC Fortran

Windows的Eclipse配置如下:

GNU Fortran Compiler: gfortran
Include paths(-l)   : C:\cygwin64\usr\include
GNU Fortran Linker  : mpif90
Tool Chain Editor   : GCC Fortran

当我在Ubuntu中执行该程序时,该程序将按预期运行。 在Ubuntu中,程序通过2个处理器执行

$ mpiexec -np 2 myprogram

其行为如下

$ mpiexec -np 2 myprogram 
 There are            2  processors running this job.
 Rank#           1 d1=           65  d2=          128
 Rank#           0 d1=            1  d2=           64

其中d1和d2是分配给每个处理器的问题域的一部分。在此示例中,总域为128。该域从1到64分配给处理器0,从65到128分配给处理器1。这是预期的行为:128的模型分为2,从1到64处理器0,处理器1从65到128。

另一方面,在Windows中,使用上述规范编译代码后,我通过执行以下程序来执行程序:

$ mpiexec.exe -n 2 myprogram.exe

行为是遵循的

$ mpiexec -np 2 myprogram 
 There are            1  processors running this job.
 Rank#           0 d1=            1  d2=          128
 Rank#           0 d1=            1  d2=          128

我们可以看到行为不同:在Windows中执行的程序未按预期并行运行。在终端中,我们可以看到有1个处理器正在运行该程序,并且将域分配如下:从1到128(整个域)到处理器0,从1到128(再次是整个域?)到处理器0。 strong> 这是我要解决的问题 。我正在尝试具有与Ubuntu中相同的行为。

用于Windows的 mpiexec.exe 程序是从官方安装程序MS-MPI获得的。

用于Windows的 gfortran OpenMPI 库是通过 cygwin

获得的

我试图在Windows的Eclipse中更改GNU链接器和编译器,但不起作用。我试图在装有Windows 10的其他计算机上运行代码,问题是相同的。

关于如何尝试解决此问题的任何建议?

1 个答案:

答案 0 :(得分:1)

如@jcgiret所述,存在一个一致性问题:该程序使用OpenMPI进行编译,并使用MS-MPI执行。 为了解决此问题,使用与openmpi软件包中定义的 mpiexec 等效的代码执行代码:

shutil.chown

该程序在Windows中由

执行
usr/bin/mpiexec -> orterun.exe

然后结果与在Ubuntu中获得的结果相同:

$ orterun.exe -n 2 myprogram.exe