我有一个 MPI 程序,它由一个主进程组成,它将命令传递给一堆从进程。收到命令后,从站只需调用 system() 即可。当从站等待命令时,它们会消耗 100% 的各自 CPU。Probe() 似乎处于一个紧密的循环中,但这只是一个猜测。你认为这可能是什么原因造成的,我能做些什么来解决它?
这是从进程中等待命令的代码。同时看日志和top命令表明,当slave在消耗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;
}