Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник лекций по предмету Методы Программирова...doc
Скачиваний:
43
Добавлен:
22.09.2019
Размер:
4.83 Mб
Скачать

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

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

int MPI_Reduce (void *sendbuf, void *recvbuf, int count, MPI_Datatype type, MPI_Op op, int root, MPI_Comm comm);

где,

recvbuf – буфер принимаемого сообщения;

count- длина буфера

MPI_Op- операция при получении сообщения

Функция MPI_Reduce минимизирует затраты.

Основные операции при приеме сообщений при вызове Reduce:

M PI_SUM

MPI_PROD для целых или вещественных int, float

MPI_MIN MPI_MAX

Л огические операции:

MPI_LAND – конъюнкция

MPI_LOR – дизъюнкция целые операнды int

MPI_LXOR – исключающее или

Побитовые операции (разрядные):

M PI_BAND

MPI_BOR int, byte

MPI_BXOR

Операции выполняются над всеми элементами сообщения.

Если в сообщении два элемента, то отдельно суммируются первые элементы каждого сообщения и отдельно вторые элементы каждого сообщения.

MPI_Reduce (&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, o, MPI_COMM_WORLD);

где о – ранг (root) получателя.

Чем больше процессов участвуют в обмене, тем больше разница между обменом точка-точка и коллективным вызовом Reduce. Reduce – вызов коллективного обмена, поэтому все процессы, указанные в Reduce коммутатора, должны выполнить этот вызов.

Пример коллективного вызова (без обмена)- коллективная синхронизация.

Существуют задачи, в которых есть точки получения промежуточных результатов всеми процессорами. Пока эти результаты не получены всеми, ни один процесс не должен продолжать свою работу. Для этого используется коллективный вызов:

Рис. 3

Продолжение работы начинается с момента, когда все процессы выполнят этот вызов, кто раньше выполнил –приостанавливается.

Рекомендация: выполнять аварийные завершения.

Аварийное завершение параллельной программы

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

int MPI_Abort (MPI_COMM comm, int errcode) или

MPI_ERR_OTHER - это корректное завершение программы

---------------------------------------------------------------------------------------

Для определения числа фактически полученных элементов сообщения необходимо использовать специальную функцию: 

int MPI_Get_count (MPI_Status *status, MPI_Datatype, int * count);

Оценка коммуникационных затрат для кластерных систем.

Независимые компоненты, подключение к локальной сети. Модель этих затрат зависит от протокола. Все сообщения разбиваются на пакеты и передаются.

Для протоколов TCP/IP

Модель А.

А: tng (m)= + m * + ,

где :

tng (m) – время передачи данных,

- начальная подготовка const,

– служебная информация const,

Модель B.

B : = + m* +(m+ )* , n=1

+ ( - )* +(m+ )* , n>1

где:

n –число передаваемых пакетов

(m+ ) )* – время передачи данных

(708 байт) – число байт, служебных в пакете(одном)

(1500 байт) – максимальный размер пакета

m* – (m-количество байтов) время подготовки и передачи данных.

Некоторые действия могут быть совмещены со временем. Время начальной подготовки не может быть больше 1.

Модель С.

С: Хокни tng (m)= + m *

если определить, то можно контролировать время передачи

β=R= - пропускная способность, α=

Время подготовки определяется с помощью передачи сообщения минимальной длины.

Для определения пропускной способности передается сообщение максимальной длины.

При пересылке сообщения в 2000 байт, время (его погрешность), при повторении этого опыта много раз. Погрешность в процентах.

Байт

А

В

С

2000

…..

2*

…..

5*

33,45

8,44

5,91

7,93

0,44

1,21

34,8

8,41

6,05

Табл. 2