struct // структура для хранения значения макс. эл. и его позиции
{
int max; // максимальное значение
int pos; // позиция
}
Генерация значений элементов массива производиться с использованием генератора произвольных чисел.
for (i = 0; i < LEN; i++)
{
mas[i] = (int)rand() * (double)((double)rand() / ((unsigned)rand()+3));
}
Рассылка массива происходит с использованием функции MPI_Bcast:
MPI_Bcast(&mas, LEN, MPI_INT, 0, MPI_COMM_WORLD);
Операция сбора данных (редукции) происходит вызовом функции MPI_Reduce:
MPI_Reduce(&In.max, &Out.max, 1, MPI_2INT, MPI_MAXLOC, 0, MPI_COMM_WORLD);
Для измерения времени исполнения участка программы используется вызов функций MPI_Wtime в начале работы и непосредственно перед выводом результатов.
t1 = MPI_Wtime();
…
t2 = MPI_Wtime();
…
printf("\nTime = %3.10f s", t2 - t1); // вывод итогового времени работы
Полный текст исходного кода с комментариями приведен в Приложении.
Пример работы программы: