2016-08-12 9 views
1

私は非常に基本的なMPIコードをテストしてい:なぜランクは1ですか?

int main(int argc, char** argv){ 

    MPI_Init(&argc, &argv); 
    int size, rank; 
    MPI_Status status; 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 

    if(rank == 0) 
    cout << "world size" << size << " my rank " << rank; 
    else 
    cout << rank << endl; 
    MPI_Finalize(); 
    return 1; 
} 

このコードを印刷:

world size1324 my rank                                              
0 

okです。

私は次のようにコードを変更する操作を行います。

int main(int argc, char** argv){ 

    MPI_Init(&argc, &argv); 
    int size, rank; 
    MPI_Status status; 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 

    if(rank == 0) 
    cout << "world size" << size << " my rank " << rank; 
    if(rank =! 0)                                               
    cout << rank << endl; 
    MPI_Finalize(); 
    return 1; 
} 

出力は次のとおりです。

world size111                                                
4 
my rank 
01 

私は第二のアプローチでは、-np 4

なぜでコードを実行し、ランクは常に1として印刷されますか?

答えて

1

あなたが気づいているかどうかわからない場合は、rankはもともと0で、次に1に設定されています。出力をよく見てください。 rankが1の場合、01が出力されません。

if(rank =! 0) 

rankがある場合は、チェックされていません:それは、rankがここでの問題は、この行である1

である第二のラインcout << rank << endl;をプリントアウト、rankが0である最初の行cout << "world size" << size << " my rank " << rank;を印刷しています0ではなく、rank!0に設定しています。効果的にブール値の代入として扱われ、0(偽)の反対は1(真)です。 ifは、その割り当ての結果を評価します。だから、ラインは基本的に同じである:あなたが持っている必要がありますどのような

rank = !0; // ie. set rank = 1 
if (rank) // 1 is true 

です:

if (rank != 0) 
関連する問題