Коллективные операции и их исполнение
Цель - изучить назначение и применение функций для выполнения коллективных операций MPI_Reduce, MPI_Allreduce, MPI_Reduce_scatter и MPI_Scan.
Схема выполнения коллективных операций MPI-процессами состоит в следующем.
Каждый MPI-процесс имеет вектор данных (чаще всего, числовой) с элементами определенного типа, например, MPI_INT. Функция коллективной операции (например, MPI_Reduce ) выполняет некоторую операцию, которая задается одним из аргументов этой функции, над нулевыми ячейками всех векторов, над первыми ячейками, и т.д.
Функции MPI_Reduce, MPI_Allreduce, MPI_Reduce_scatter и MPI_Scan, выполняющие такого рода коллективные операции, отличаются друг от друга только способом размещения результата операции в MPI-процессах.
Задача 1. Реализовать программу следующего содержания:
Объяснить поведение программы (в частности, содержимое вектора result ) при запуске программы с np - N при различных N.
Задача 2. Модифицировать предыдущую программу, заменив операцию MPI_Reduce на MPI_Allreduce, и предусмотрев печать содержимого вектора result в каждом из процессов.
Объяснить полученные результаты и предложить эквивалентную схему реализации, использующую функцию MPI_Reduce и функции коллективного обмена данными.
Задача 3. Реализовать программу, которая
- рассылает строки исходной прямоугольной матрицы по процессам;
- находит максимальный элемент в каждом столбце этой матрицы,
- умножает все элементы i-ой строки матрицы на максимальный элемент i -го столбца,
- собирает полученную матрицу в процессе с номером 0, который ее распечатывает.