MPI 程序不会立即启动 (Fedora)

MPI 程序不会立即启动 (Fedora)

抱歉,我不确定这是在此处问还是在 Stack Overflow 上问更好,但这是在全新的 Fedora 39 安装中进行的,并且我已经使用软件包(通过 dnf 安装)mpich-devel、openmpi-devel 和(来自linux-homebrew) openmpi 和我遇到同样的问题。我想这与系统有关,这就是为什么我认为最好在这里问。

基本上,如果我尝试运行包含 MPI_Init 的 MPI 程序,它确实会运行,但实际启动需要很长时间。它也不会立即出现top;似乎由于某种原因被推迟了。当它出现时,它的运行速度和我预期的一样快。这是一个简单的 Fortran 语言的 hello world MPI 程序:

program hello_world
    use mpi
    implicit none
    integer :: mpi_size, mpi_rank
    integer :: ierr
    double precision :: t1, t2

    call MPI_Init(ierr)
    t1 = MPI_Wtime()

    call MPI_Comm_size(MPI_COMM_WORLD, mpi_size, ierr)
    call MPI_Comm_rank(MPI_COMM_WORLD, mpi_rank, ierr)

    print*, "Hello from rank ", mpi_rank, " of ", mpi_size, "."

    t2 = MPI_Wtime()
    print*, "time for full program", t2-t1
    call MPI_Finalize(ierr)

end program hello_world

我可以用 mpif90 编译它(没有错误),并且可以延迟几分钟运行它。我查找了可能导致此问题的原因,并在类似的帖子中建议关闭其他程序并禁用 wifi(不知道为什么?),但这些都没有帮助。

这是输出time mpirun -np 2 ./a.out

 Hello from rank            0  of            2 .
 time for full program   1.3940195000000001E-002
 Hello from rank            1  of            2 .
 time for full program   1.4017349000000000E-002

real    2m27.524s
user    0m0.033s
sys 0m0.163s

作为比较,这里有一个更简单的 hello world 程序,

program hello
    print *, 'Hello, World!'
end program hello

如果我使用 进行编译mpif90,并对其计时(这里使用一个处理器运行以与 gfortran 进行比较),我得到:

 Hello, World!

real    1m13.201s
user    0m0.016s
sys 0m0.074s

./a.out使用 gfortran,(如果我使用or运行并不重要mpirun -np 1 ./a.out

 Hello, World!

real    0m0.002s
user    0m0.001s
sys 0m0.001s

看起来它也间歇性地工作,无需等待。 (足以让我删除这个问题,以为更新修复了它,但当我再次运行它时,问题又回来了)

编辑:看起来问题出在MPI_Init某种程度上。您可以拨打电话,例如

    call date_and_time(values=values)
    print *, values(5),":",values(6),":",values(7),":",values(8)

求某条线路的时间,瓶颈是MPI_Init

示例: 程序开始时间:

17 : 20 : 6 : 221

MPI_Init

17 : 21 : 21 : 128

MPI_Finalize

17 : 21 : 21 : 132

答案1

我刚刚解决了一个类似的问题,我的整体mpiexec -n 4 ./my_program运行了 90 多秒,然后才真正做任何事情。程序本身在没有 MPI 的情况下运行约 0.15 秒。

解决方案是禁用所有网络连接。(WiFi、VPN...)这将运行时间缩短mpiexec至不到 1 秒。

我已通过数百台设备连接到 eduroam WiFi,并且拥有公共 IP 地址。这可能是由于后台网络超时的一些问题造成的。

有人已经在 Cygwin 邮件列表中解决了类似的问题 https://sourceware.org/legacy-ml/cygwin/2016-12/msg00192.html。我在运行 Kernel 6.6.26、OpenMPI 5.0.2 和 g++ 12.3.0 的 Linux 机器上面临同样的问题,所以这个问题可能不仅仅与 Windows 机器和 Cygwin 有关。

设置-H localhost或没有帮助,效果与第一段中没有这些参数的-H 127.0.0.1运行相同。mpiexec

相关内容