0
私は1つのプロセスでこのコードを実行すると、それが正常に動作にMPI_Comm_splitを使用して:if文
#include <iostream>
#include "mpi.h"
using namespace std;
int main(int argc, char* argv[])
{
MPI_Comm SubWorld;
MPI_Init(&argc, &argv);
int Rank;
MPI_Comm_rank(MPI_COMM_WORLD, &Rank);
if (Rank == 0)
MPI_Comm_split(MPI_COMM_WORLD, 1, Rank, &SubWorld);
cout << Rank << endl;
MPI_Finalize();
return 0;
}
出力:0
しかし、私は複数のプロセスでそれを実行すると、出力があります"1"のみ!
このコードは正常に動作します:
#include <iostream>
#include "mpi.h"
using namespace std;
int main(int argc, char* argv[])
{
MPI_Comm SubWorld;
MPI_Init(&argc, &argv);
int Rank;
MPI_Comm_rank(MPI_COMM_WORLD, &Rank);
MPI_Comm_split(MPI_COMM_WORLD, 1, Rank, &SubWorld);
cout << Rank << endl;
MPI_Finalize();
return 0;
}
を出力し、いくつかのために "0" と "1" の2本のライン。
私は複数のプロセスで実行すると最初のコードで何が間違っているのでしょうか?
グレートでMPIタスク0ハングということです。右? – Abdulkader
はい。いくつかのタスクでは、新しいコミュニケータは 'MPI_COMM_NULL'かもしれません。そして、私はそれが分割されたMPI_Commを呼び出すのが正しいと確信していません。 fwiw、 'MPI_Comm_create_group()'はコミュニケータを作成するために使用でき、元のコミュニケータのサブセットであるグループのプロセスによってのみ呼び出されます。 –