我在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的其他计算机上运行代码,问题是相同的。
关于如何尝试解决此问题的任何建议?
答案 0 :(得分:1)
如@jcgiret所述,存在一个一致性问题:该程序使用OpenMPI进行编译,并使用MS-MPI执行。 为了解决此问题,使用与openmpi软件包中定义的 mpiexec 等效的代码执行代码:
shutil.chown
该程序在Windows中由
执行usr/bin/mpiexec -> orterun.exe
然后结果与在Ubuntu中获得的结果相同:
$ orterun.exe -n 2 myprogram.exe