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
我有一个基于 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