Теория и практика параллельных вычислений


Передача данных от всех процессов одному процессу Операция редукции - часть 2


При этом все вызовы функции должны содержать одинаковые значения параметров count, type, op, root, comm;
  • передача сообщений должна быть выполнена всеми процессами, результат операции будет получен только процессом с рангом root;
  • выполнение операции редукции осуществляется над отдельными элементами передаваемых сообщений. Так, например, если сообщения содержат по два элемента данных и выполняется операция суммирования MPI_SUM, то результат также будет состоять из двух значений, первое из которых будет содержать сумму первых элементов всех отправленных сообщений, а второе значение будет равно сумме вторых элементов сообщений соответственно;
  • не все сочетания типа данных type и операции op возможны, разрешенные сочетания перечислены в табл. 5.3.
  • Таблица 5.2. Базовые (предопределенные) типы операций MPI для функций редукции данных

    ОперацииОписание
    MPI_MAXОпределение максимального значения
    MPI_MINОпределение минимального значения
    MPI_SUMОпределение суммы значений
    MPI_PRODОпределение произведения значений
    MPI_LANDВыполнение логической операции "И" над значениями сообщений
    MPI_BANDВыполнение битовой операции "И" над значениями сообщений
    MPI_LORВыполнение логической операции "ИЛИ" над значениями сообщений
    MPI_BORВыполнение битовой операции "ИЛИ" над значениями сообщений
    MPI_LXORВыполнение логической операции исключающего "ИЛИ" над значениями сообщений
    MPI_BXORВыполнение битовой операции исключающего "ИЛИ" над значениями сообщений
    MPI_MAXLOCОпределение максимальных значений и их индексов
    MPI_MINLOCОпределение минимальных значений и их индексов


    Рис. 5.2.  Общая схема операции сбора и обработки на одном процессе данных от всех процессов

    Таблица 5.3. Разрешенные сочетания операции типа операнда в операции редукции

    ОперацииДопустимый тип операндов для алгоритмического языка C
    MPI_MAX, MPI_MIN, MPI_SUM, MPI_PRODЦелый, вещественный
    MPI_LAND, MPI_LOR, MPI_LXORЦелый
    MPI_BAND, MPI_BOR, MPI_BXORЦелый, байтовый
    MPI_MINLOC, MPI_MAXLOCЦелый, вещественный


    Рис. 5.3.  Пример выполнения операции редукции при суммировании пересылаемых данных для трех процессов (в каждом сообщении 4 элемента, сообщения собираются на процессе с рангом 2)

    Применим полученные знания для переработки ранее рассмотренной программы суммирования: как можно увидеть, весь программный код, выделенный рамкой, может быть теперь заменен на вызов одной лишь функции MPI_Reduce:

    // Сборка частичных сумм на процессе с рангом 0 MPI_Reduce(&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);




    Начало  Назад  Вперед



    Книжный магазин