我的MPI程序由一个主进程和一堆从进程组成。主进程将命令交给从进程处理。从进程收到命令后,会通过调用system()函数来执行命令。当从进程等待命令时,它们会消耗各自CPU的100%。看起来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;
}
fork()
函数时可能出现分段错误的情况。 - Hristo Iliev