Студопедия — Глобальные вычислительные операции над распределенными данными
Студопедия Главная Случайная страница Обратная связь

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

Глобальные вычислительные операции над распределенными данными






В параллельном программировании математические операции над блоками данных, распределенных по процессорам, называют глобальными операциями редукции. В общем случае операцией редукции называется операция, аргументом которой является вектор, а результатом - скалярная величина, полученная применением некоторой математической операции ко всем компонентам вектора. В частности, если компоненты вектора расположены в адресных пространствах процессов, выполняющихся на различных процессорах, то в этом случае говорят о глобальной (параллельной) редукции. Например, пусть в адресном пространстве всех процессов некоторой группы процессов имеются копии переменной var (необязательно имеющие одно и то же значение), тогда применение к ней операции вычисления глобальной суммы или, другими словами, операции редукции SUM возвратит одно значение, которое будет содержать сумму всех локальных значений этой переменной. Использование этих операций является одним из основных средств организации распределенных вычислений.

В MPI глобальные операции редукции представлены в нескольких вариантах:

  • С сохранением результата в адресном пространстве одного процесса (MPI_Reduce).
  • С сохранением результата в адресном пространстве всех процессов (MPI_Allreduce).
  • Префиксная операция редукции, которая в качестве результата операции возвращает вектор. i-я компонента этого вектора является результатом редукции первых i компонент распределенного вектора (MPI_Scan).
  • Совмещенная операция Reduce/Scatter (MPI_Reduce_scatter).

Функция MPI_Reduce выполняется следующим образом. Операция глобальной редукции, указанная параметром op, выполняется над первыми элементами входного буфера, и результат посылается в первый элемент буфера приема процесса root. Затем то же самое делается для вторых элементов буфера и т.д.

С:

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

MPI_Op op, int root, MPI_Comm comm)

FORTRAN:

MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT,

COMM, IERROR)

<type> SENDBUF(*), RECVBUF(*)

INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR

IN sendbuf - адрес начала входного буфера;
OUT recvbuf - адрес начала буфера результатов (используется только в процессе-получателе root);
IN count - число элементов во входном буфере;
IN datatype - тип элементов во входном буфере;
IN op - операция, по которой выполняется редукция;
IN root - номер процесса-получателя результата операции;
IN comm - коммуникатор.

В качестве операции op можно использовать либо одну из предопределенных операций, либо операцию, сконструированную пользователем. Все предопределенные операции являются ассоциативными и коммутативными. Сконструированная пользователем операция, по крайней мере, должна быть ассоциативной. Порядок редукции определяется номерами процессов в группе. Тип datatype элементов должен быть совместим с операцией op. В таблице 6 представлен перечень предопределенных операций, которые могут быть использованы в функциях редукции MPI.

Таблица 6. Предопределенные операции в функциях редукции MPI

Название Операция Разрешенные типы
MPI_MAX MPI_MIN Максимум Минимум C integer, FORTRAN integer, Floating point</TD
     
MPI_SUM MPI_PROD Сумма Произведение C integer, FORTRAN integer, Floating point, Complex</TD
     
MPI_LAND MPI_LOR MPI_LXOR Логическое AND Логическое OR Логическое исключающее OR C integer, Logical</TD
     
MPI_BAND MPI_BOR MPI_BXOR Поразрядное AND Поразрядное OR Поразрядное исключающее OR C integer, FORTRAN integer, Byte</TD
     
MPI_MAXLOC MPI_MINLOC Максимальное значение и его индекс Минимальное значение и его индекс Специальные типы для этих функций</TD
     

В таблице используются следующие обозначения:

C integer: MPI_INT, MPI_LONG, MPI_SHORT, MPI_UNSIGNED_SHORT, MPI_UNSIGNED, MPI_UNSIGNED_LONG
FORTRAN integer: MPI_INTEGER
Floating point: MPI_FLOAT, MPI_DOUBLE, MPI_REAL, MPI_DOUBLE_PRECISION, MPI_LONG_DOUBLE
Logical: MPI_LOGICAL
Complex: MPI_COMPLEX
Byte: MPI_BYTE

Операции MAXLOC и MINLOC выполняются над специальными парными типами, каждый элемент которых хранит две величины: значение, по которым ищется максимум или минимум, и индекс элемента. В MPI имеется 9 таких предопределенных типов.

C:  
MPI_FLOAT_INT float and int  
MPI_DOUBLE_INT double and int  
MPI_LONG_INT long and int  
MPI_2INT int and int  
MPI_SHORT_INT short and int  
MPI_LONG_DOUBLE_INT long double and int  

 

FORTRAN:  
MPI_2REAL REAL and REAL  
MPI_2DOUBLE_PRECISION DOUBLE PRECISION and DOUBLE PRECISION  
MPI_2INTEGER INTEGER and INTEGER  

Функция MPI_Allreduce сохраняет результат редукции в адресном пространстве всех процессов, поэтому в списке параметров функции отсутствует идентификатор корневого процесса root. В остальном, набор параметров такой же, как и в предыдущей функции.

С:

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

MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

FORTRAN:

MPI_ALLREDUCE (SENDBUF, RECVBUF, COUNT, DATATYPE, OP,

COMM, IERROR)

<type> SENDBUF(*), RECVBUF(*)

INTEGER COUNT, DATATYPE, OP, COMM, IERROR

IN sendbuf - адрес начала входного буфера;
OUT recvbuf - адрес начала буфера приема;
IN count - число элементов во входном буфере;
IN datatype - тип элементов во входном буфере;
IN op - операция, по которой выполняется редукция;
IN comm - коммуникатор.

Функция MPI_Reduce_scatter совмещает в себе операции редукции и распределения результата по процессам.

С:

MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int *recvcounts,

MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

FORTRAN:

MPI_REDUCE_SCATTER(SENDBUF,RECVBUF,RECVCOUNTS,

DATATYPE, OP, COMM, IERROR)

<type> SENDBUF(*), RECVBUF(*)

INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR

IN sendbuf - адрес начала входного буфера;
OUT recvbuf - адрес начала буфера приема;
IN revcount - массив, в котором задаются размеры блоков, посылаемых процессам;
IN datatype - тип элементов во входном буфере;
IN op - операция, по которой выполняется редукция;
IN comm - коммуникатор.

Функция MPI_Reduce_scatter отличается от MPI_Allreduce тем, что результат операции разрезается на непересекающиеся части по числу процессов в группе, i-ая часть посылается i-ому процессу в его буфер приема. Длины этих частей задает третий параметр, являющийся массивом. На Рис. 10 представлена графическая интерпретация операции Reduce_scatter.

Функция MPI_Scan выполняет префиксную редукцию. Параметры такие же, как в MPI_Allreduce, но получаемые каждым процессом результаты отличаются друг от друга. Операция пересылает в буфер приема i-го процесса редукцию значений из входных буферов процессов с номерами 0,... i включительно.

С:

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

MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

FORTRAN:

MPI_SCAN(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR)

<type>SENDBUF(*), RECVBUF(*)

INTEGER COUNT, DATATYPE, OP, COMM, IERROR

IN sendbuf - адрес начала входного буфера
OUT recvbuf - адрес начала буфера приема
IN count - число элементов во входном буфере
IN datatype - тип элементов во входном буфере
IN op - операция, по которой выполняется редукция
IN comm - коммуникатор






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



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

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

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

Studopedia.info - Студопедия - 2014-2024 год . (0.025 сек.) русская версия | украинская версия