Опубликован: 22.04.2008 | Уровень: профессионал | Доступ: платный
Дополнительный материал 6:

Коллективные (радиовещательные) обмены данными между MPI-процессами

Ключевые слова: точка-точка, ранг, функция

Цель - изучить назначение и применение функций обмена данными MPI_Bcast, MPI_Gather, MPI_Scatter и др. между MPI-процессами.

Отличия операций коллективного обмена данными от коммуникаций типа "точка-точка" состоят в следующем:

  1. принимают/передают данные одновременно все процессы группы для указываемого коммуникатора;
  2. операция коллективного обмена выполняет одновременно и прием, и передачу данных, а потому она имеет параметры, часть из которых относится к приему данных, а часть - к их передаче;
  3. как правило, значения всех параметров (за исключением адресов буферов с данными) должны быть тождественны во всех процессах;
  4. для сообщений передаваемых посредством коллективного обмена, идентификаторы (tags) назначаются автоматически; кроме того, сообщения передаются, в действительности, не по указываемому коммуникатору, а с помощью временного коммуникатора-дубликата, чем обеспечивается изоляция операций коллективной передачи данных друг от друга и от операций типа "точка-точка".

Задача 1. Реализовать рассылку сообщения от процесса с заданным рангом (этот ранг является входным параметром задачи) всем другим процессам в группе с помощью функции MPI_Bcast. Реализовать эквивалентный вариант программы, в котором вместо функции MPI_Bcast используются функции синхронной передачи данных MPI_Send и MPI_Recv.

Задача 2. Реализовать посылку сообщений (например, значений ранга) от всех процессов в группе, процессу с заданным рангом (этот ранг является входным параметром программы) с помощью функции MPI_Gather. Реализовать эквивалентный вариант программы, в котором вместо функции MPI_Gather используются функции синхронной передачи данных MPI_Send и MPI_Recv.

Задача 3. Оттранслировать и выполнить с параметром -np 4 программу, представленную ниже, в которой функция MPI_Scatter используется для рассылки строк матрицы чисел с плавающей точкой по отдельным процессам. Дополнить эту программу фрагментом, в котором отдельные процессы суммируют все элементы полученной строки и возвращают полученные результаты корневому процессу с помощью функции MPI_Gather.


Дмитрий Молокоедов
Дмитрий Молокоедов
Россия, Новосибирск, НГПУ, 2009
Паулус Шеетекела
Паулус Шеетекела
Россия, ТГТУ, 2010