gpt4 book ai didi

windows-8 - MPI_Init() 运行时间很长

转载 作者:行者123 更新时间:2023-12-02 22:28:15 28 4
gpt4 key购买 nike

我有一个最小的问题示例,我只是启动 4 个进程(在具有 8 个线程的四核 Intel Core i7 cpu 上),并且出于某种原因 MPI_Init 似乎需要非常,很长一段时间。

这是我的代码:

 1 program smear_sfs
2
3 integer, parameter :: ikind = 4
4 integer, parameter :: rkind = 8
5
6 integer(kind = ikind) :: isize, iproc, ierr
7 integer(kind = ikind) :: i, j
8
9 include "mpif.h"
10 integer(kind = ikind) :: istat(MPI_STATUS_SIZE)
11
12 print*, 'Section 1'
13
14 ! initialize mpi
15 write(*, '(a)', advance='no'), 'Calling MPI_Init ...'
16 call MPI_Init(ierr)
17 write(*, '(a)') 'done'
18 print*, 'ierr = ', ierr
19 call MPI_Barrier(MPI_COMM_WORLD, ierr)
20 call MPI_Comm_Rank(MPI_COMM_WORLD, iproc, ierr)
21 call MPI_Comm_Size(MPI_COMM_WORLD, isize, ierr)
22 do i = 0,isize
23 call MPI_Barrier(MPI_COMM_WORLD, ierr)
24 if(iproc.eq.i) write(*, '(a, i3, a)') 'rank(', iproc, ') reporting'
25 call MPI_Barrier(MPI_COMM_WORLD, ierr)
26 enddo
27
28 ! shutdown MPI
29 call MPI_Barrier(MPI_COMM_WORLD, ierr)
30 call MPI_Finalize(ierr)
31
32 end program smear_sfs

这是输出的(定时)版本:

 Section 1
Calling MPI_Init ... Section 1
Calling MPI_Init ... Section 1
Calling MPI_Init ... Section 1
Calling MPI_Init ...done
ierr = 0
rank( 0) reporting
done
ierr = 0
rank( 1) reporting
done
ierr = 0
rank( 2) reporting
done
ierr = 0
rank( 3) reporting

real 0m45.350s
user 1m25.794s
sys 1m31.731s

程序立即输出Section 1和以下Calling MPI_Init ...,但随后挂起很长时间,然后才打印done code> 和其余输出。由于某种原因,它在 MPI_Init 上挂了很长时间,我不明白为什么。

如果这很重要的话,我第一次运行这个程序时,我从防火墙收到了一些奇怪的警告,声称我的计算机发生了一些事情(我认为是来自orted.exe)但我再也没有收到这个错误了。

我通过 cygwin64 在 Windows 8 上运行此程序并使用 MPIf90 进行编译。

谢谢。

最佳答案

希望是最后一次编辑:

我在 OpenMPI 用户邮件列表中询问。在那里我得到了建议,它也可能是我的 WLAN。

确实如此!这是我的 WLAN,至少有一半的时间是我测试的。另一次是我的 LAN,我也用它来访问互联网。

所以:尝试在“开始”>“控制面板”>“网络和 Internet”>“网络和共享中心”>“更改适配器设置”中停用 LAN 和 WLAN但这只是一种解决方法。

<小时/>

这不是一个真正的答案,但我想分享我在这个令人烦恼的主题上的 5 小时经验。 (我仍然时不时地遇到这个问题)

我遇到了同样的问题:编译并运行程序后,它似乎挂起,但最终会在一两分钟后运行。

虽然问题发生在我的笔记本电脑上,但在我的台式电脑上却没有。两者都运行在 Win 7、cygwin 64 位、OpenMPI 版本 1.8.3 r32794 (ompi_info)、g++ v 4.8.3 上。我后来实际上同步了 cygwin 安装,但仍然无法正常工作,但重新启动后就可以了,所以我不能真正排除问题是 cygwin 安装不知何故搞砸了。

当我在台式电脑上启动程序时,我的防火墙 Comodo 5.10 通知我有关 orterun.exe(mpirun 只是 orterun 的符号链接(symbolic link))和 myprogram.exe 的信息。在我(永久)允许这两个程序后,启动的程序仍然没有恢复执行。取消程序并重新启动后,程序运行没有问题,运行速度很快。因此,在我看来,如果 OpenMPI 无法立即连接,那么它可能只有错误处理能力不足。也许这与问题有某种关系。

我正在使用 Comodo 防火墙 5.10。在我的台式机上完全没有防火墙,甚至在我的笔记本上也没有 Windows 防火墙(已停用)。在我的笔记本上安装 Comodo 5.10 也没有帮助。但重启后一切正常,所以也许防火墙还没有完全到位?但是安装程序没有提示我重新启动并且防火墙已经在工作,所以...

我的台式电脑的编译版本确实可以通过 mpirun 在我的笔记本上运行...我想。唉,我无法复制这个,我已经尝试了几个小时了。因此,我认为错误出在编译器或 OpenMPI 库中。

将我笔记本上的 cygwin 安装与桌面上的安装同步后,安装允许所有受影响程序的防火墙并重新启动我的笔记本,它终于起作用了...我不确定到底是什么解决了问题以及为什么要重新启动是必要的。

显然这个问题在我的笔记本上已经存在好几个月了,所以我之前确实重新启动了笔记本,但问题没有得到解决。

其他人也有关于他们的 VPN 软件干扰 OpenMPI 并导致这些问题的故事,但我没有运行这样的软件。

编辑:几个小时后问题又回来了!我也尝试过但没有结果的事情:

  • 关闭可能阻塞 TCP-IP 连接的程序
  • ping 127.0.0.1 有效 <1 毫秒
  • 以管理员身份运行 bash
  • 从 Windows cmd 运行 orterun/mpirun,而不是 cygwin-bash
  • 完全停止 Windows 防火墙服务和 Windows Defender
  • 使用 MPI_Init(NULL,NULL);而不是 MPI_Init(&argc,&argv);
  • 使用 gcc 而不是 g++ 进行编译
  • 如果我不使用 mpirun 启动程序,程序可以正常工作,但如果我使用 mpirun -n 1 启动程序,程序也无法运行
  • 更新 Windows
  • 使用安全模式(使用网络驱动程序)
  • 尝试调试它(我无法获得 MPI_init 调用的有用回溯)

关于windows-8 - MPI_Init() 运行时间很长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19185775/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com