2016-05-14 7 views
0

Sorry, wenn dies eine dumme Frage ist, aber ich möchte nur wissen, was die eigentliche Bedeutung der if-Anweisung unten ist.Überprüfen Sie die Anzahl der Prozesse in MPI für die Leistung von zwei

int rank, numprocs; 
MPI_Status status; 

MPI_Init(&argc,&argv); 
MPI_Comm_size(MPI_COMM_WORLD, &numprocs); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank ); 

if(numprocs&(numprocs-1)) 
{ 
    if(rank==0) printf("numprocs must be a power of 2.\n"); 
    MPI_Finalize(); 
    return EXIT_FAILURE; 
} 

Mir wurde gesagt, dass „numprocs & (numprocs-1)“, wenn die numprocs ist die Potenz von 2 zu überprüfen verwendet wird, aber, wie es tatsächlich funktioniert? Was ist die Ausgabe der Aussage? Ist es boolesch oder int?

Danke.

Antwort

2

Der Operator & ist ein bitweiser AND-Operator.

Wenn numprocs ist die Macht der 2, dessen binäre Darstellung enthält genau ein Bit, dessen Bit 1.

Zum Beispiel, wenn numprocs = 16, numprocs - 1 = 15 und ihre UND Null sein, weil in Subtraktion Kreditaufnahme geschieht von LSB zu das Bit, dessen Wert 1.

10000 (16) 
& 01111 (15) 
------------ 
    00000 (0) 

Gegenteil, wenn numprocs positiv ist und nicht die Potenz von 2, dessen Binärdarstellungen mehr als ein Bit, dessen Bit enthalten ist 1.

Wenn zum Beispiel numprocs = 20, numprocs - 1 = 19 und das Ausleihen in Subtraktion stoppen, bevor das oberste Bit erreicht wird, so überlebt das Bit, dessen Wert 1 ist, und das Ergebnis ist nicht Null.

10100 (20) 
& 10011 (19) 
------------ 
    10000 (16) 

Das Ergebnis ist int. if Anweisung in C behandelt Null als falsch und nicht Null als wahr.

Verwandte Themen