微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CPU 使用率在使用英特尔 MPI 的 do-loop MPI_Bcast 中保持 100%

如何解决CPU 使用率在使用英特尔 MPI 的 do-loop MPI_Bcast 中保持 100%

我在英特尔 C++ 下有一个带有英特尔 MPI 库的 MPI 程序。

主进程会根据用户的输入向其他工作进程广播数据。

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

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,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 但是在intel MPI中,我找不到类似的选项

我把 MPI_Bcast 改成了 MPI_IBcast ,好像没什么改善。

有什么解决办法吗?

谢谢大家。

解决方法

通过下面的设置,上面的问题已经解决了。

I_MPI_WAIT_MODE=0
I_MPI_THREAD_YIELD=3
I_MPI_THREAD_SLEEP=10

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。