Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!!Экзаменационные вопросы_003.rtf
Скачиваний:
9
Добавлен:
19.09.2019
Размер:
17.62 Mб
Скачать
  1. Укрупнение. Цели. Методы. Контрольные вопросы.

Укрупнение.

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

Во-первых, эффективность снижается за счет затрат на коммуникации. Как правило, процессор не может одновременно выполнять вычисления и обмениваться данными. Поскольку нашей задачей, как правило, являются вычисления, общая производительность может быть повышена за счет сокращения объема передаваемых данных. Менее очевидным способом повышения эффективности является сокращение количества обменов, даже при неизменном объеме передаваемых данных. Это происходит в результате сокращения накладных расходов.

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

Другие методы повышения производительности.

Простым алгоритмом является использование дерева или массива для выполнения вычислений и затем передачи вычисленной суммы. Таким образом, вся операция займет 2*(N-1) или 2*log N шагов соответственно. Эти алгоритмы оптимальны в том смысле, что не выполняются никакие излишние вычисления или коммуникации. Однако, можно использовать другие алгоритмы, выполняющиеся за меньшее время, хотя и за счет дополнительных, избыточных вычислений.

1-й вариант – это использование кольца вместо массива таким образом, что каждый процессор накапливает частичную сумму, и спустя N-1 шагов каждый процессор содержит окончательную сумму. Следовательно, за счет избыточных (N-1)2 вычислений и (N-1)2 коммуникаций, алгоритм завершается за N-1 шагов.

Аналогично можно модифицировать алгоритм на основе дерева. Выполнение множества параллельных суммирований позволяет завершить алгоритм за log N шагов. Можно ожидать, что это потребует также N2 излишних суммирований и коммуникаций. Однако в данном случае имеется решение, которое позволяет ограничится N log N операций. Для этого используется структура, называемая «бабочкой». Здесь на каждом из log N шагов каждая задача принимает данные от 2-х других, выполняющих вычисление и передает данные 2-м другим задачам для следующего шага.

В ходе укрупнения надо избегать излишних ограничений в масштабируемости. Так, можно применять 1-мерную декомпозицию, мотивируя это тем, что количество процессоров в реальном компьютере не требует более глубокой декомпозиции. Однако, такая стратегия приводит к плохо масштабируемому решению. Если программа должна быть переносимой и масштабируемой, то при проектировании очень существенна возможность создавать переменное число задач. Это также полезно при настройке производительности для конкретного компьютера. Например, если задача часто блокируется ожиданием удаленных данных, то на стадии распределения можно назначить несколько задач одному процессору. Тогда во время ожидания одной задачей результатов обмена может выполняться другая. Это называется перекрытием вычислений и коммуникаций.

Укрупнение используют:

  • когда полученные в результате декомпозиции задачи не могут выполняться одновременно;

  • чтобы увеличить зернистость вычислений и коммуникаций;

  • чтобы снизить затраты на разработку, иногда ценой снижения параллельности.

Контрольные вопросы, требующие ответа по окончанию этапа укрупнения:

  1. снижает ли укрупнение затраты на коммуникации (за счет увеличения локальности)?

  2. Если при укрупнении дублируются коммуникации, убедились ли вы, что преимущества этого перевешивают недостатки, для предписанного диапазона размерности задачи и количества процессоров?

  3. Если при укрупнении дублируются данные, убедились ли вы, что это не снижает масштабируемость алгоритма, ограничения диапазона размерности проблемы или число процессоров?

  4. Получаются ли при укрупнении задачи со сходными затратами на вычисления и коммуникации? Чем больше размер задач, полученных при укрупнении, тем это важнее.

  5. Масштабируется ли число задач с увеличением числа процессоров?

  6. Если при укрупнении были исключены некоторые возможности параллельного выполнения, убедились ли вы, что осталось достаточно возможностей параллельного выполнения для текущих и перспективных компьютеров?

  7. Можно ли еще уменьшить количество задач, не снижая масштабируемость, не увеличивая затраты на программирование и не внося неравнозначности нагрузки?

  8. Если вы преобразуете существующую последовательную программу, учли ли вы затраты на переделку кода?

  1. Распределение по процессорам. 2 стратегии. Проблемы. Методы. Алгоритмы балансировки нагрузки – глобальные и локальные. Бисекция, несбалансированная бисекция. Рекурсивная бисекция графа. Контрольные вопросы.

Распределение по процессорам.

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

Целью распределения является максимальное сокращение времени выполнения. Можно представить себе 2 стратегии:

  1. Размерность задач, способных выполняться параллельно, на разных процессорах, чтобы повысить параллельность.

  2. Размерность задач, требующих значительных коммуникаций, на 1 процессоре, чтобы повысить локальность.

Многие алгоритмы, полученные в результате доменной декомпозиции, предусматривают фиксированное количество задач одинакового размера и структурированные коммуникации. В этом случае задача распределения проста. Мы распределяем задачи так, чтобы снизить объем коммуникаций между процессорами. Мы можем также укрупнить задачи, если это еще не сделано. В итоге получаем P «крупных» задач – по 1 на процессор.

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

Наиболее сложным является случай, когда количество задач и объем вычислений и коммуникаций на задачу является переменным. Для задач, полученных в результате доменной декомпозиции, можно использовать стратегии динамической балансировки нагрузки, когда алгоритм балансировки выполняется периодически, определяя новые укрупнение и распределение.

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

Алгоритмы, основанные на функциональной декомпозиции, часто приводят к организации вычислений в виде множества короткоживущих задач, связывающихся с другими сразу после старта и непосредственно перед завершением. В этом случае, мы используем механизм «запуска по расписанию», который назначает задачу процессору, который простаивает или скоро окажется в простое.

Алгоритмы балансировки нагрузки.

Существует значительное количество алгоритмов, как широкого применения, так и специфичных для конкретных приложений. Все такие алгоритмы предназначены для слияния небольших задач, полученных на 1-х стадиях проектирования и создания «крупнозернистого параллелизма» - одна задача на процессор. В качестве альтернативы можно считать, что это алгоритмы разделения вычисляющего домена на части – по 1 на процессор. Поэтому их иногда называют алгоритмами разделения.

Метод половинного деления.

Он используется для разделения домена на части примерно равного размера в отношении объема вычислений и коммуникаций при стремлении минимизировать стоимость коммуникаций, т.е. количество связей, пересекающих границы задачи. Используется подход «разделяй и властвуй». Вначале домен делится на 2 части по 1-му измерению. Затем субдомены, в свою очередь, делятся пополам, и т.д. Заметьте, что эта рекурсивная стратегия дополняет параллельное выполнение самого алгоритма балансировки.

Наиболее простое применение этой методики – деление по координатам, обычно применение к нерегулярным сетям с преимущественно локальными коммуникациями. В этом случае деление выполняется по физическим координатам узлов сети, причем на каждом этапе разбивается наибольшее измерение так, что координаты (например, х) всех узлов одного субдомена больше, чем координаты всех узлов второго. Это простой и недорогой алгоритм, однако, он не оптимизирует коммуникации. В частности, обрабатываются «длинные» субдомены, что в случае существенных локальных коммуникаций приводит к значительным затратам.

Другой вариант бисекции называется несбалансированной бисекцией. В этом случае при делении стремятся получить более «квадратные» субдомены. Вместо автоматического деления пополам рассматривается P-1 разделов, представляющих собой несбалансированные решетки с нагрузкой 1/P и (P-1)/P, 2/P и (P-2)/P и т.д. Выбирается такое разделение, которое оптимизирует «отношение сторон» получаемых субдоменов. Этот метод требует больше вычислений, но позволяет сократить затраты на коммуникации.

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

Решетка рассматривается как граф с N вершинами. Алгоритм вначале вычисляет два «края» графа – т.е. наиболее удаленные друг от друга точки (наиболее удаленные в смысле расстояния на графе, т.е. минимального количества ребер на пути от 1 края к др.). Затем все прочие точки относят к 1 из субдоменов, исходя из их близости к «краям».

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

Алгоритмы расписания задач.

Контрольные вопросы:

  1. Если рассматривается проект SMPD, анализировался ли алгоритм, основанный на динамическом создании и удалении задач? Часто этот подход дает более простой алгоритм, хотя требуется анализ производительности.

  2. Наоборот. SPMD часто дает больший контроль над вычислениями и коммуникациями, но может быть более сложным.

  3. Если алгоритм балансировки централизован, убедились ли мы, что менеджер не станет узким местом?

  4. Если используется динамическая схема балансировки, оценили ли мы сравнительную стоимость разных стратегий? Всегда следует рассматривать в качестве 1-й из альтернатив вероятностные или циклические схемы как более простые и исключающие необходимость в повторяющихся операциях балансировки.

  5. Если использовать вероятностные или циклические схемы, имеются ли достаточно большое количество задач? Тип – в 10 раз больше чем процессоров.

  1. Количественная оценка проекта. Постановка задачи. Понятие модели производительности. Различные метрики и их недостатки. Время выполнения – определение, составляющие. Время вычислений. Время коммуникаций. Модель Ts – Tw.

Оценка факторов формализуется в так называемых моделях производительности. Эти модели могут использоваться для сравнения эффективности различных алгоритмов, оценки масштабируемости и идентификации узких мест в проекте прежде, чем будут сделаны значительные вложения в разработку.

Помимо времени выполнения и масштабируемости вычислительного ядра, необходимо рассмотреть механизмы генерации, хранения и передачи данных по сети, записи и считывания с диска и передачи от 1-й стадии вычислений к другой. Мы должны учитывать затраты на различных стадиях разработки, включая проектирование, реализацию, выполнение и обслуживание.

Относительная важность этих различных метрик меняется от задачи к задаче. Спецификация может жестко устранять некоторые из них, требовать оптимизации других и игнорировать третьи.

Хорошая модель производительности, как научная теория, должна объяснять имеющиеся наблюдения и предсказывать поведение системы в будущем, исключая при этом несущественные детали. Если упомянутые выше метрики не отвечают 1-му условию, то обычно используемые модели перегружены деталями.

В моделировании используется метрика времени выполнения как функции от размерности задачи N, числа процессоров P, числа задач U и других аппаратных и программных характеристик T = f (N, P, U, …).

Временем выполнения параллельных программ мы будем считать время от старта 1-го процессора до завершения работы последнего. Во время выполнения каждый процессор выполняет вычисления, коммуникации либо находтися в состоянии останова. Таким образом, время выполнения есть сумма T = Tcomp + Tcomm + Tidle и соответствует времени любого, производительности процессора, либо сумма времен всех процессоров:

T=1/P*(summ(I=0, P-1, Ti,comp)+summ(I=0, P-1, Ti,comm)+summ(I=0, P-1, Ti,idle))

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

Таким образом, наша цель – определить математическое выражение, которое определяет время выполнения как функцию от N, P и проч. Эти модели должны быть максимально простыми, сохраняя приемлемую точность. Для снижения сложности используются следующие дополнения:

- мы основываем модель производительности на модели идеального мультикомпьютера. Аппаратные детали, такие как иерархия памяти и тополгия связей сети рассматривается только при наличии доказательств их значимости.

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

- Мы используем эксперимент для калибровки простых моделей вместо разработки более сложных.

Рассмотрим 3 составляющих общего времени выполнения – время вычислений, время коммутации и время простоя.

Время вычисления обычно зависит от размера задачи. Это может быть 1 параметр N или набор параметров N1, N2 и т д. Если вычисления повторяется (как в примере с суммированием), это время также зависит от количества задач или процессоров. В гетерогенной вычислительной среде (сеть рабочих станций) это время может меняться в зависимости от того, на каком компьютере выполняются вычисления.

Время вычисления зависит также от характеристик процессоров и их подсистем памяти. Например, изменение размера задачи или числа процессов может изменить производительность процессора. Поэтому не следует полагаться на постоянство этого времени.

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

Приближенно можно определить, что время коммуникации в идеальной мультикомпьютерной архитектуре представляется 2 парами – временем запуска ts (время, затраченное на инициализацию передачи) и время передачи 1 слова (обычно 4-байт) tw, определяемое полосой пропускания сети связи. Тогда время передачи сообщения длиной L слов составит Tmsg = ts + tw * L.