Я написал пример кода ниже:Определение глобальных переменных в 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;
}
Как можно заметить, эта программа фактически определяет глобальную переменную х и нулевой поток пытается присвоить какое-то значение для него. Когда у меня есть эта программа запускается на (симметричная многопроцессорная) машины SMP с 4 ядрами я получаю следующие результаты:
10.1
0
0
0
Более интересно, когда я изменить свой код так, чтобы каждая нить печатает адрес переменной х, т.е. & x, все они печатают одно и то же.
Мой вопрос в том, как возможно, что несколько потоков в системе SMP имеют одинаковое значение для адреса переменной, в то время как у них нет одинакового значения?
и мой второй вопрос - как изменить приведенный выше код, чтобы получить следующие результаты?
10.1
10.1
10.1
10.1
Возможно, переменная имеет один и тот же адрес и другое значение, потому что это не потоки, а процессы? –
@Joachim: Как я могу узнать, являются ли они процессами или потоками? – Mehrdad
С текущими реализациями MPI каждый ранг является отдельным процессом. –