【发布时间】: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 实现。让我尽量保持一致并检查。谢谢!