2016-08-12 172 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 

這是確定。

當我這樣做的代碼更改爲以下:

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。它的打印第一線cout << "world size" << size << " my rank " << rank;其中rank爲0,然後打印出的第二行cout << rank << endl;其中rank爲1

這裏的問題是這一行:

if(rank =! 0) 

你是不是檢查,如果rank是而不是0,您將rank設置爲!0。它被有效地視爲布爾值的賦值,而0(假)的相反值爲1(真)。 if然後評估該分配的結果。因此,該行基本相同:

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

你應該擁有的是:

if (rank != 0)