加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-8 – MPI_Init()需要很长时间才能运行

发布时间:2020-12-14 05:42:32 所属栏目:Windows 来源:网络整理
导读:我有一个问题的最小例子,我只是启动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 intege
我有一个问题的最小例子,我只是启动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,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(',') 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

程序输出第1部分和以下调用MPI_Init …,然后在打印完成之前和输出的其余部分之后长时间挂起.由于某种原因,这在MPI_Init上挂了很长时间,我无法弄清楚原因.

如果它真的很重要,我第一次运行它时,我的防火墙发出了一些奇怪的警告,声称我的计算机发生了某些事情(来自我认为的orted.exe),但我还没有得到那个错误.

我在Windows 8上通过cygwin64运行它并使用MPIf90进行编译.

谢谢.

解决方法

希望最后编辑:

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

的确!这是我的WLAN,至少是我测试它的一半时间.另一次是我的局域网,我也用它来访问互联网.

所以:尝试在开始时关闭LAN和WLAN>控制面板>网络和互联网>网络和共享中心>更改适配器设置
不过,这只是一种解决方法.

这不是一个真正的答案,但我想与这个令人烦恼的主题分享我5小时的经验. (我还是经常遇到这个问题)

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

虽然问题发生在我的笔记本电脑上,但它并没有出现在我的台式电脑上.两者都运行在Win 7,cygwin 64位,OpenMPI版本1.8.3 r32794(ompi_info),g v 4.8.3.我实际上后来同步了cygwin安装,它仍然无法正常工作,但它在重新启动后就完成了,所以我不能真正排除问题是某种程度上拙劣的cygwin安装.

当我在桌面PC上启动程序时,我的防火墙Comodo 5.10通知我关于orterun.exe(mpirun只是orterun的符号链接)和myprogram.exe.在我(永久)允许这两个程序后,启动的程序仍然没有恢复执行.取消程序并重新启动程序后,程序运行没有问题,这意味着它运行得很快.因此,在我看来,如果无法立即连接,OpenMPI可能只有足够的错误处理.也许这与问题有某种关系.

我正在使用Comodo Firewall 5.10.在我的桌面上,绝对没有防火墙,甚至我的笔记本电脑上的Windows防火墙(停用)也没有.在我的笔记本上安装Comodo 5.10也没有帮助.但重启后一切正常,所以防火墙可能还没有完全到位?但安装程序没有提示我重启,防火墙已经工作,所以…

我的桌面电脑的编译版本确实在我的笔记本上运行了mpirun ……我想.唉,我无法复制这个,我现在试了几个小时.因此,我认为错误在于编译器或OpenMPI库.

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

显然问题在我的笔记本上存在了几个月,所以我在没有问题解决之前重新启动笔记本.

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

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

>关闭可能阻塞TCP-IP连接的程序> ping 127.0.0.1工作< 1ms>以管理员身份运行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调用的有用回溯)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读