主人在Rmpi程序中消耗100%的CPU

dx_*_*mrt 1 hpc r mpi

我正在使用Rmpi(v.6.2-2)软件包来并行化我的R(v.2.15)代码.我有以下代码和平:

library(Rmpi)
source("slaveFunction04.r")
mpi.spawn.Rslaves(nslaves=2)
mpi.bcast.Robj2slave(slaveFunction04)
mpi.remote.exec(slaveFunction04())
mpi.close.Rslaves()
mpi.quit()
Run Code Online (Sandbox Code Playgroud)

当从属程序正在执行slaveFunction04时,我希望主进程处于空闲状态,消耗的资源非常少,因为当您使用带有C或Fortran的MPI时会发生这种情况.但相反,主机正在消耗100%的CPU,就像从机一样(每个进程都在自己的核心中运行).

知道为什么会这样,我该如何解决呢?

对于MPI,我在OpenSuse 12.3上使用OpenMPI v.1.6-3.1.2.

提前致谢.

Jon*_*rsi 5

这并不罕见,实际上几乎是我期望在C或Fortran以及主从分解中看到的.

MPI专为高性能并行计算而设计,通常如果任务被阻塞等待消息,那么没有比尽快获取该消息更重要的事情,因此实现"忙等待",反复轮询以查看如果消息已到达,则占用CPU.那嚼了CPU时间,但假设没有什么别的事情可做,它刮胡子微秒时关闭消息的延迟不会到达.在大多数MPI实现中,该操作模式通常是默认操作; 这就是所谓的中的openmpi"激进"模式,并描述在这里.

对于许多问题来说,这是一个非常合理的默认行为,但并不总是你想要的,所以有办法将其关闭.如果这是您所看到的原因,您应该能够通过将环境变量设置OMPI_MCA_mpi_yield_when_idle为1(或非零)来稍微减少主服务器上的CPU负载,以退出主动模式.