Windows 8 MPI_Init()运行时间很长

Windows 8 MPI_Init()运行时间很长,windows-8,cygwin,fortran,mpi,fortran90,Windows 8,Cygwin,Fortran,Mpi,Fortran90,我有一个最小的问题示例,我只是启动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

我有一个最小的问题示例,我只是启动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
程序立即输出
第1节
和以下调用MPI_Init…,但随后在打印
完成
和其他输出之前挂起很长时间。出于某种原因,这在
MPI_Init
上挂了很长时间,我不知道为什么

如果这有什么关系的话,我第一次运行这个程序时,我从防火墙收到了某种奇怪的警告,声称我的计算机发生了什么事情(我想是从
orted.exe
得到的),但我再也没有收到那个错误了

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


谢谢。

希望最后一次编辑:

我在OpenMPI用户邮件列表中询问。在那里我得到了建议,那也可能是我的无线局域网

真的!这是我的无线局域网,至少有一半的时间是我测试的。另一次是我的局域网,我也用它上网

因此:尝试在“开始”>“控制面板”>“网络和Internet”>“网络和共享中心”>“更改适配器设置”中停用LAN和WLAN 不过,这只是一个解决办法


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

我也有同样的问题:在编译和运行一个程序之后,它似乎挂起了,但它最终会在一两分钟后工作

虽然问题发生在我的笔记本电脑上,但它不在我的台式电脑上。两者都运行在Win 7、cygwin 64位、OpenMPI版本1.8.3 r32794(ompi_信息)、g++v 4.8.3上。事实上,我后来同步了cygwin的安装,但它仍然不起作用,但在重新启动后确实起了作用,因此我不能排除问题是cygwin安装出了问题

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

我正在使用Comodo防火墙5.10。在我的桌面上,绝对没有防火墙,甚至我笔记本上的Windows防火墙(已停用)也没有。在我的笔记本上安装Comodo5.10也没用。但重启后一切正常,所以防火墙可能还没有完全就位?但是安装程序没有提示我重新启动,防火墙已经在工作了,所以

从我的台式电脑编译的版本确实在我的笔记本上运行了mpirun。。。我想。唉,我无法复制这一点,我尝试了几个小时。因此,我认为错误在于编译器或OpenMPI库

在将我在笔记本电脑上的cygwin安装和桌面上的cygwin安装同步后,在允许所有受影响程序的地方安装了防火墙,并重新启动了我的笔记本电脑,它终于工作了。。。我不确定到底是什么解决了问题,为什么需要重启

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

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

编辑: 几个小时后,问题又出现了! 我也徒劳地尝试过的事情:

  • 关闭可能阻塞TCP-IP连接的程序

  • ping 127.0.0.1适用于您使用的开放MPI的哪个版本?我使用的是OpenMPI 1.7.1。我无法在Ubuntu Linux上复制它,我得到(real,user,sys)值(1.054s,0.048s,0.024s)。我认为这不是代码本身的问题,因为我以前在其他平台上编写过MPI。是否有人知道cygwin或Windows 8如何使用MPI?如果您(暂时)关闭防火墙会发生什么情况?您应该将此作为新问题发布,并在网站上提问。在各种开放MPI框架中,有许多MCA参数用于启用详细模式,这些参数可用于调试此类问题。