Я объявил значение int в моем main, и все процессы инициализировали это значение. Все они хранят значение, которое я хочу вывести на экран после завершения вычислений. Является ли трансляция решением? Например. как реализовать?
int i;
int value;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD;&myrank);
left = (myrank - 1); if (left < 0) left = numtasks-1;
right = (myrank + 1); if (right >= numtasks) right = 0;
if(myrank==0){
value=value+myrank;
MPI_Send(value,MPI_INT,right,99,MPI_COMM_WORLD);
MPI_Recv(value,MPI_INT,left,99,MPI_COMM_WORLD,&status);
}
else if(myrank==(numtasks-1)){
MPI_Recv(value,MPI_INT,left,99,MPI_COMM_WORLD,&status);
value=value+myrank;
MPI_Send(value,MPI_INT,right,99,MPI_COMM_WORLD);
}
else{
MPI_Recv(value,MPI_INT,left,99,MPI_COMM_WORLD,&status);
value=value+myrank;
MPI_Send(value,MPI_INT,right,99,MPI_COMM_WORLD);
}
Они должны составить логический круг. Делаю одно вычисление (сумма всех рангов), и в процессе 0 получаю результат. Этот результат (для 4 процессов будет 6) я хочу распечатать каждым из процессов после этого вычисления. Но я не вижу, как именно использовать барьер и где.
Есть еще одно но, после всех N-1 отправок (где N - количество процессов) у меня должна быть сумма всех рангов в каждом из процессов. В моем коде я получаю эту сумму только в процессе 0... Это может быть плохой подход :-(