for (j = 0; j < LEN; j++)
{
printf("%d ", mas[j]); // вывод содержимого массива на экран
}
printf(";\n");
}
// ---
MPI_Bcast(&mas, LEN, MPI_INT, 0, MPI_COMM_WORLD); // рассылка массива
eps = (int) LEN / size; // разделение масс. на части
start_p = rank * eps; // начальная позиция для текущего процесса
if (rank == size-1) // для последнего процесса
{
In.max = 0;
In.pos = 0;
// поиск максимального элемента и его номера
for (int i = start_p; i < LEN; i++)
{
if (mas[i] > In.max) // проверка
{
In.max = mas[i];
In.pos = i + 1;
}
}
}
else // все остальные процессы
{
In.max = 0;
In.pos = 0;
// поиск максимального элемента и его номера
for (int i = start_p; i < start_p + eps; i++)
{
if (mas[i] > In.max)
{
In.max = mas[i];
In.pos = i + 1;
}
}
}
// сбор (редукция) данных и выбор итогового максимального значения
MPI_Reduce(&In.max, &Out.max, 1, MPI_2INT, MPI_MAXLOC, 0, MPI_COMM_WORLD);
// вывод результатов на экран