CPU 使用 Intel MPI 在 do-loop MPI_Bcast 中保持 100%

CPU usage keeps 100% in a do-loop MPI_Bcast using Intel MPI

我有一个基于 Intel C++ 的 MPI 程序及其 Intel MPI 库。

根据用户的输入,master进程会向其他worker进程广播数据。

在 worker 进程中,我使用 do-while 循环来保持从 master 接收数据

int master_rank =0
int mycmd;
if(my_rank==master_rank )
{
  //wait for user input
  //accept input command
  MPI_Bcast(&mycmd, 1, MPI_INT, master_rank, MPI_COMM_WORLD);  ​
  //do some work
}
else
{
  MPI_Bcast(&mycmd, 1, MPI_INT, master_rank, MPI_COMM_WORLD);
  switch (mycmd)
  {
    case  1:
       // do some work
       break;
    case 2:
       // do some work
       break;
    default:
       std::cout << "myrank:" << my_rank << "Unknown command:" << mycmd << std::endl;
       break;

  }
} 

然而,我发现即使在等待用户输入期间,所有工作进程总是使 CPU 使用率接近 100%。

这让我的电脑太热了..

我在网上搜索了一下,发现 openMPI 提供了一个选项 mpi_yield_when_idle Probe seems to consume the CPU

mpirun -np N --mca mpi_yield_when_idle 1 ./a.out But in intel MPI, I can not find a similar option

我把MPI_Bcast改成了MPI_IBcast,好像一点改善都没有。

有解决办法吗?

谢谢大家

通过如下设置,上述问题已经解决

I_MPI_WAIT_MODE=0
I_MPI_THREAD_YIELD=3
I_MPI_THREAD_SLEEP=10