为什么mpirun不尊重我选择的BTL?

时间:2014-10-13 22:54:16

标签: c cygwin mpi openmpi

我在Windows 7机器上使用Cygwin上的Open MPI(1.8.3)。我想在这台机器上独占运行MPI代码,而无需在任何外部网络上进行通信。我知道我应该能够使用MCA选项将mpirun限制为自我和共享内存通信:

mpirun -n 8 --mca btl sm,self ./hello.exe

但是,当我尝试这个时,Windows会问我是否要设置防火墙例外,这表明我的工作是尝试通过TCP进行外部通信。此外,mpirun将在完成之前暂停大约一分钟,并且仅当我在hello world作业完成之前在无线网络上时才会这样做。如果我关闭无线网卡或切换到有线以太网连接,它会在预期的大约一秒钟内完成。

为什么mpirun没有观察到我选择的BTL?

2 个答案:

答案 0 :(得分:2)

  

为什么mpirun没有观察到我选择的BTL?

绝对可以观察您选择的BTL。但是还有另一个框架,即OOB,默认情况下也使用TCP。您应该禁用两个框架的tcp组件,以防止Open MPI完全使用TCP:

mpirun -n 8 --mca btl ^tcp --mca oob ^tcp ...

请注意,完全禁用TCP可能会产生意外影响。

答案 1 :(得分:0)

为了完整起见,我想详细说明Hristo的答案。

如果我的模拟软件看似随机崩溃了。经过一些侦探工作,我发现,丢失网络连接会导致MPI中止/失败/崩溃。

随机崩溃的原因是我的笔记本电脑连接的易碎无线。因此,当偶尔掉线的wifi连接导致我的纯粹本地工作结束。

因此,在我的系统上,我从BTL和OOB中排除了我的Ubuntu机器上的无线网络(名为wlp3s0。现在,并行运行无法禁用wifi。

mpirun --mca oob_tcp_if_exclude wlp3s0 --mca btl_tcp_if_exclude wlp3s0 -np 2 someApplication