Опубликован: 22.04.2008 | Доступ: свободный | Студентов: 526 / 50 | Оценка: 4.50 / 4.75 | Длительность: 06:55:00
Специальности: Программист
Дополнительный материал 7:

Коллективные операции и их исполнение

Цель - изучить назначение и применение функций для выполнения коллективных операций 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. Реализовать программу, которая

  1. рассылает строки исходной прямоугольной матрицы по процессам;
  2. находит максимальный элемент в каждом столбце этой матрицы,
  3. умножает все элементы i-ой строки матрицы на максимальный элемент i -го столбца,
  4. собирает полученную матрицу в процессе с номером 0, который ее распечатывает.