Я объявил значение int в моем main, и все процессы инициализировали это значение. Все они хранят значения, которые я хочу записать на экране после завершения вычислений. Является ли Broadcast решением? Например. как это реализовать?
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 ... Это может быть плохой подход: - (