Дипломная работа: Распараллеливание многоблочных задач для SMP-кластера
4.3 Алгоритмы EVAH
В 2001-ом году на международной конференции по параллельной обработке, организованной IEEE (Институтом Инженеров по Электротехнике и Радиоэлектронике) Джомери и Рупак Бизвас предложили ряд новых алгоритмов для решения задачи балансировки в приложениях гидрогазодинамики [2]. Эти алгоритмы описаны в статье “Task Assignment Heuristics for Distributed CFD Applications”. Этой статьи нет в свободном доступе, но идею алгоритма можно взять в другой статье этих же самых авторов.
В рамках этой работы будем использовать один алгоритм из этой серии, который называется Largest Task First with Minimum Finish Time and Available Communication Costs” (LTF_MFT_ACC, в первую очередь большие задачи с наименьшим временем выполнения и известными затратами на коммуникации). Позже EVAH был интегрирован другими разработчиками в реальных приложениях типа OVERFLOW-D (моделирование подвижных объектов в аэродинамике) и показал весьма неплохой результат.
Ядро алгоритма можно описать следующим образом:
Пусть:
zi – задача i
Xi – время выполнения zi
R(zi ) – совокупность всех задач, от которых zi получает данных
D(zi ) – совокупность всех задач, которые получают данные от задачи zi
C – время коммуникации
T(pi ) – суммарное время выполнения задач на процессоре pi
1: Отсортируем список задач по весу (времени выполнения) в убывающем порядке
2: В начале время выполнения задач на каждом процессоре = 0 (процессоры свободные)
3: Для каждой отсортированной задачи zi выполнять:
3.1: Распределить задачу на процессор pj , у которого загрузка T(pj ) наименьшая. Пересчитать T(pj ) = T(pj ) + Xi
3.2: Для каждой задачи zr в R(zi ), назначенной на процессор pk != pj выполнить
T(pj ) = T(pj ) + Cir
Если задача zr (которая уже распределена на другой процессор) получает данные от задачи zi то надо добавить в T(pj ) время коммуникации между zi и zr */
3.3: Для каждой задачи zd в D(zi ), назначенной на процессор pm != pj выполнить
T(pm ) = T(pm ) + Cdi
Если задача zi получает данные от zd (которая уже распределена на процессор pm ) то надо добавить в T(pm ) время коммуникации */
4: Конец цикла
Для иллюстрации работы алгоритма рассмотрим следующий пример (рисунок 3).
Имеем четыре пересекающиеся сетки (блоки) zi (i=0..3). Надо распределить блоки по двум процессорам p0 и p1 так, чтобы минимизировать время выполнения.
Рисунок 3. Иллюстрация работы алгоритма EVAH
Шаг 1. Четыре блока отсортированы в убывающем порядке по времени выполнения (Xi ), получаем: z3 , z2 , z0 , z1
Шаг 2. В начале суммарное время выполнения на процессорах равно 0, T(p0 ) = T(p1 ) = 0