【问题标题】:Different behavior of mpiexec in Windows and in UbuntuWindows 和 Ubuntu 中 mpiexec 的不同行为
【发布时间】:2019-06-25 19:33:50
【问题描述】:

我在 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。 这是我要解决的问题。我正在尝试拥有与 Ubuntu 中相同的行为。

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

gfortran 和 Windows 的 OpenMPI 库是通过使用 cygwin 获得的

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

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

【问题讨论】:

  • 请不要将 javascript sn-p 用于其他语言。使用{} 按钮或三个```
  • @VladimirF 你是对的,很快就会更正,谢谢
  • 您的问题在编译 MPI 程序时很常见。您很可能正在使用 MPI 实现(在您的情况下,我认为它是 OpenMPI)在 Windows 上编译您的软件,并且您正在使用另一个 MPI 实现(很可能是 MS-MPI)来执行它。为了解决您在 Windows 上的问题,您应该对用于编译的 MPI 实现和用于运行并行程序的 MPI 实现保持一致。
  • @jcgiret 是的,没错,实现是OpenMPI,执行是通过MS-MPI。这是因为我没有找到在 Windows 中运行代码的 OpenMPI 实现。让我尽量保持一致并检查。谢谢!

标签: eclipse mpi gfortran


【解决方案1】:

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

usr/bin/mpiexec -> orterun.exe

程序在windows中执行

$ orterun.exe -n 2 myprogram.exe

那么结果和在Ubuntu下得到的结果是一样的:

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

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多