我有一个MPI程序,由一个主进程组成,将命令交给一堆从进程.收到命令后,slave只需调用system()来执行此操作.当奴隶正在等待命令时,他们正在消耗100%的各自CPU.似乎Probe()坐在一个紧凑的循环中,但这只是猜测.您认为可能导致这种情况,我该怎么做才能解决这个问题?
这是从属进程中等待命令的代码.同时观察日志和top命令表明,当奴隶消耗他们的CPU时,他们就在这个功能中.
MpiMessage
Mpi::BlockingRecv() {
LOG(8, "BlockingRecv");
MpiMessage result;
MPI::Status status;
MPI::COMM_WORLD.Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, status);
result.source = status.Get_source();
result.tag = status.Get_tag();
int num_elems = status.Get_count(MPI_CHAR);
char buf[num_elems + 1];
MPI::COMM_WORLD.Recv(
buf, num_elems, MPI_CHAR, result.source, result.tag
);
result.data = buf;
LOG(7, "BlockingRecv about to return (%d, %d)", result.source, result.tag);
return result;
}
Run Code Online (Sandbox Code Playgroud)