一連のスレーブプロセスにコマンドを渡す1つのマスタープロセスで構成されるMPIプログラムがあります。コマンドを受信すると、スレーブはsystem()を呼び出してそれを実行します。スレーブがコマンドを待機している間、スレーブはそれぞれのCPUを100%消費しています。Probe()はタイトなループにあるように見えますが、それは推測にすぎません。これを引き起こしている可能性があると思いますか、それを修正するために何ができますか?
コマンドを待機するスレーブプロセスのコードは次のとおりです。logと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;
}