1

我正在使用 Rmpi​​ (v. 0.6-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()

当从属正在执行 slaveFunction04 时,我希望主进程处于空闲状态,消耗很少的资源,就像您将 MPI 与 C 或 Fortran 一起使用时那样。但是相反,主进程消耗 100% 的 CPU,就像从属进程一样(每个进程都在自己的内核中运行)。

知道为什么会发生这种情况,我该如何解决?

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

提前致谢。

4

1 回答 1

5

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

MPI 是为高性能并行计算而设计的,通常如果任务被阻塞等待消息,没有比尽快获取消息更重要的事情要做,因此实现“忙等待”,反复轮询以查看如果消息已到达,则占用 CPU。这会消耗 CPU 时间,但假设没有其他事情可做,并且当消息确实到达时,它会将延迟时间缩短几微秒。在大多数 MPI 实现中,这种操作模式通常是默认的。它在 OpenMPI 中称为“积极”模式,并在此处进行了描述。

对于许多问题,这是一个非常明智的默认行为,但并不总是您想要的,因此有一些方法可以将其关闭。如果这是您所看到的原因,您应该能够通过将环境变量设置OMPI_MCA_mpi_yield_when_idle为 1(或非零)来退出积极模式,从而在一定程度上减少主服务器上的 CPU 负载。

于 2013-03-15T21:12:31.347 回答