Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




 

В рассмотренной программе суммирования числовых значений имеющаяся процедура сбора и последующего суммирования данных является примером часто выполняемой коллективной операции передачи данных от всех процессов одному процессу. В этой операции над собираемыми значениями осуществляется та или иная обработка данных (для подчеркивания последнего момента данная операция еще именуется операцией редукции данных). Как и ранее, реализация операции редукции при помощи обычных парных операций передачи данных является неэффективной и достаточно трудоемкой. Для наилучшего выполнения действий, связанных с редукцией данных, в MPI предусмотрена функция:

int MPI_Reduce(void *sendbuf, void *recvbuf, int count,

MPI_Datatype type, MPI_Op op, int root, MPI_Comm comm),

 

где

· sendbuf — буфер памяти с отправляемым сообщением;

· recvbuf — буфер памяти для результирующего сообщения (только для процесса с рангом root);

· count — количество элементов в сообщениях;

· type — тип элементов сообщений;

· op — операция, которая должна быть выполнена над данными;

· root — ранг процесса, на котором должен быть получен результат;

· comm — коммуникатор, в рамках которого выполняется операция.

 

В качестве операций редукции данных могут быть использованы предопределенные в MPI операции – см. табл. 4.2.

 

Общая схема выполнения операции сбора и обработки данных на одном процессе показана на табл. 4.2. Элементы получаемого сообщения на процессе root представляют собой результаты обработки соответствующих элементов передаваемых процессами сообщений, т.е.:

где Ä есть операция, задаваемая при вызове функции MPI_Reduce (для пояснения на рис. 4.3 показан пример выполнения функции редукции данных).

 

Следует отметить:

· функция MPI_Reduce определяет коллективную операцию, и, тем самым, вызов функции должен быть выполнен всеми процессами указываемого коммуникатора. При этом все вызовы функции должны содержать одинаковые значения параметров count, type, op, root, comm;

· передача сообщений должна быть выполнена всеми процессами, результат операции будет получен только процессом с рангом root;

· выполнение операции редукции осуществляется над отдельными элементами передаваемых сообщений. Так, например, если сообщения содержат по два элемента данных и выполняется операция суммирования MPI_SUM, то результат также будет состоять из двух значений, первое из которых будет содержать сумму первых элементов всех отправленных сообщений, а второе значение будет равно сумме вторых элементов сообщений соответственно;

· не все сочетания типа данных type и операции op возможны, разрешенные сочетания перечислены в табл. 4.3.

Таблица 4.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 Определение минимальных значений и их индексов

 

 

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

Таблица 4.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 Целый, вещественный

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

 

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

// Сборка частичных сумм на процессе с рангом 0

MPI_Reduce(&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, 0,

MPI_COMM_WORLD);


 

Лабораторная работа

 

В заданиях лабораторной работы 4 предлагается написать программу на языке C++ задачи, выданной преподавателем. Оттранслировать и сделать замеры времени реализации программы от объема исходных данных. Разработать параллельную MPI программу с использованием процедур MPICH 1.2.7, в том числе, процедур коллективного обмена.

Выполнить замеры времени реализации программы от числа процессоров и объема исходных данных. Построить графики показателей эффективности параллельных программ. Сделать выводы.

 

В состав отчета должны быть включены:

а) Титульный лист.

б) Распечатки откомпилированных текстов MPI-программ.

в) Скриншоты результатов выполнения программ.

г) Выводы по работе.

 

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 59; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты