Опубликован: 11.02.2010 | Уровень: специалист | Доступ: платный | ВУЗ: Санкт-Петербургский государственный университет
Лекция 1:

Введение

Лекция 1: 1234 || Лекция 2 >

Разработка параллельного алгоритма

Выделяют следующие этапы разработки параллельного алгоритма

  1. Декомпозиция.На этом этапе выполняются анализ задачи и оценка возможности распараллеливания. Задача и связанные с ней данные разделяются на более мелкие части - подзадачи и фрагменты структур данных. Особенности архитектуры конкретной вычислительной системы на данном этапе могут не учитываться.
  2. Проектирование коммуникаций (обменов данными) между задачами.Определяются коммуникации, необходимые для пересылки исходных данных, промежуточных результатов выполнения подзадач, а также коммуникации, необходимые для управления работой подзадач. Выбираются методы коммуникации.
  3. Укрупнение.Подзадачи объединяются в более крупные блоки, если это позволяет повысить эффективность алгоритма и снизить трудоемкость разработки.
  4. Планирование вычислений.Распределение подзадач между процессорами. Основной критерий выбора способа размещения подзадач - эффективное использование процессоров с минимальными затратами времени на обмены данными.

Рассмотрим эти этапы подробнее.

Декомпозиция (сегментирование, расщепление)

Существуют разные методы декомпозиции. Рассмотрим основные подходы.

Декомпозиция по данным

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

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

Рекурсивная дихотомия

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

Рекурсивная координатная дихотомия

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

Метод рекурсивной дихотомии графа

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

Функциональная декомпозиция

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

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

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

  1. Мелкозернистый параллелизм - на уровне команд (менее 20 команд на блок, количество параллельно выполняемых подзадач - от единиц до нескольких тысяч, средний масштаб параллелизма около 5 команд на блок).
  2. Среднеблочный параллелизм - на уровне процедур. Размер блока до 2000 команд. Выявление такого параллелизма сложнее реализовать, поскольку следует учитывать межпроцедурные зависимости. Требования к коммуникациям меньше, чем в случае параллелизма на уровне команд.
  3. Крупноблочный параллелизм - на уровне программ (задач). Соответствует выполнению независимых программ на параллельном компьютере. Крупноблочный параллелизм требует поддержки операционной системой.

Важнейшим условием декомпозиции является независимость подзадач. Существуют следующие виды независимости:

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

Полной независимости добиться обычно не удается.

Проектирование коммуникаций

Можно выделить следующие основные типы коммуникаций:

  • локальные - каждая подзадача связана с небольшим набором других подзадач;
  • глобальные - каждая подзадача связана с большим числом других подзадач;
  • структурированные - каждая подзадача и подзадачи, связанные с ней, образуют регулярную структуру (например, с топологией решетки);
  • неструктурированные - подзадачи связаны произвольным графом;
  • статические - схема коммуникаций не изменяется с течением времени;
  • динамические - схема коммуникаций изменяется в процессе выполнения программы;
  • синхронные - отправитель и получатель данных координируют обмен;
  • асинхронные - обмен данными не координируется.

Рекомендации по проектированию коммуникаций:

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

Укрупнение

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

  • должны быть снижены накладные расходы на коммуникации;
  • если при укрупнении приходится дублировать вычисления или данные, это не должно приводить к потере производительности и масштабируемости программы;
  • результирующие задачи должны иметь примерно одинаковую трудоемкость;
  • должна быть сохранена масштабируемость;
  • должна быть сохранена возможность параллельного выполнения;
  • должна быть снижена стоимость трудоемкости разработки.
Лекция 1: 1234 || Лекция 2 >
Сергей Лебедев
Сергей Лебедев
Россия
Паулус Шеетекела
Паулус Шеетекела
Россия, ТГТУ, 2010