Ho scritto un codice di esempio riportato di seguito:Definizione di variabili globali in mpi
#include <stdio.h>
#include <mpi.h>
double x;
int main (int argc, char **argv) {
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank==0) x=10.1;
MPI_Barrier(MPI_COMM_WORLD);
printf("%f\n", x);
MPI_Finalize();
return 0;
}
Come si può notare, questo programma definisce in realtà una variabile globale chiamata x e il filo zeroth cerca di assegnare un valore ad esso. Quando ho questo programma eseguito su un (Symmetric multiprocessing) macchina SMP con 4 core ottengo i seguenti risultati:
10.1
0
0
0
Più interessante, quando cambio il mio codice in modo che ogni stampe filo l'indirizzo di variabile x, vale a dire & x, tutti stampano la stessa cosa.
La mia domanda è come è possibile che un numero di thread su un sistema SMP condivida lo stesso valore per l'indirizzo di una variabile mentre non condividono lo stesso valore?
e la mia seconda domanda è come dovrei cambiare il codice sopra in modo da ottenere i seguenti risultati?
10.1
10.1
10.1
10.1
La variabile probabilmente ha lo stesso indirizzo e un valore diverso perché non è realmente thread ma processi? –
@Joachim: Come posso sapere se sono processi o thread? – Mehrdad
Con le implementazioni MPI correnti ogni rango è un processo separato. –