如何解决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 举报,一经查实,本站将立刻删除。