Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 1216 / 120 | Оценка: 4.73 / 4.45 | Длительность: 18:17:00
ISBN: 978-5-94774-546-7
Специальности: Программист
Лекция 10:

Диспетчирование параллельных вычислительных систем

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Формальное описание алгоритма диспетчера

Пусть задана (рис. 10.11) расширенная матрица следования S*, отражающая информационные связи внутри множества m работ j = 1...m. Веса tj — времена выполнения каждой j -й работы на каждом из n процессоров однородной ВС с общей ОП.

Граф алгоритма и расширенная матрица следования

Рис. 10.11. Граф алгоритма и расширенная матрица следования

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

Вспомогательные построения

Пусть в результате распределения составляется таблица-расписание \sigma, содержащая n строк — расписаний одному процессору. В строке — последовательность заданий двух видов: выполнить работу (задачу, оператор и т.д.) \alpha, простоять t единиц времени ( \ubox{t} ). Момент Ti, i = 1 ... n, окончания (отсчет — от нуля) выполнения последней работы или проcтоя, назначенных к данному шагу распределения i -му процессору, назовем текущим временем занятости процессора.

Пусть в процессе распределения формируется таблица (множество) A номеров задач, назначенных к данному шагу распределения последними для выполнения на каждом процессоре. Эти номера заносятся в позиции, закрепленные за каждым процессором. Если последним был записан простой, в соответствующей позиции значится 0.

В множество B будем объединять процессоры (один или более), имеющие на данном шаге распределения минимальное время занятости.

В множество \beta выделим те работы из A, которые выполняются на процессорах из B.

Множество R — множество работ, соответствующих входам (нулевым строкам) текущего значения изменяемой в процессе распределения матрицы следования S.

Алгоритм.

  1. Полагаем первоначально T_{i} = 0,  i = 1 \dots  n, A = \{ 0, \dots ,0\} , B= \{ 1 \dots  n\} ,= \varnothing   ,  R = \varnothing   , \nu  = 1,  S_{\nu }^{*} = S^{*} ; переходим к выполнению шага 6.
  2. Находим Tmu = min{Ti} и множество B номеров процессоров с найденным временем занятости.
  3. Находим множество \beta  \subseteq  A номеров задач, назначенных последними на процессоры из B. После построения \beta все позиции в A, соответствующие процессорам из B, полагаем равными нулю. Этим моделируется окончание выполнения задач на данных процессорах к моменту T_{\mu }.
  4. Если \beta  = \varnothing, переходим к выполнению шага 7 при R \ne  \varnothing и шага 10 при R = \varnothing ; при \beta  \ne  \varnothing выполняем следующий шаг.
  5. Исключаем из S_{\nu }^{*} строки и столбцы, соответствующие задачам, составляющим множество \beta. Полагаем \nu  := \nu  + 1.
  6. Находим множество R входов матрицы следования S_{\nu }, соответствующих не назначенным ранее задачам. Если R = \varnothing, переходим к выполнению шага 10.
  7. Располагаем номера задач, составляющих R, в порядке невозрастания времени их выполнения.
  8. Производим поочередное назначение задач, составляющих упорядоченное множество R, на процессоры, составляющие множество B. Назначенные задачи исключаем из R, а процессоры, на которые произведено назначение, — из B. Номер каждой назначенной задачи заносим в позицию A, соответствующую данному процессору. Время занятости этого процессора увеличиваем на время выполнения назначенной задачи. Последовательное назначение прекращается в одном из трех случаев: a) R \ne  \varnothing , B = \varnothing ; б) R = \varnothing   , B =\varnothing ; в) R =\varnothing  , B \ne  \varnothing.

    Примечание. Шаги 7 и 8 реализуют решающее правило, лежащее в основе данного (и каждого!) эвристического (практичного, эффективного, но не основанного на точном решении сложной задачи) алгоритма распараллеливания. Повторим его:

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

    Возможны и другие решающие правила, например, основанные на допустимом резерве времени до обязательного момента окончания решения и др. Применяемое здесь решающее правило обеспечивает высокое быстродействие диспетчера и достаточно редкое (менее 10 %) отклонение результатов распределения от тех же результатов, получаемых методом точного решения задачи распараллеливания.

  9. Если в результате выполнения шага 8, B = \varnothing, переходим к выполнению шага 12.
  10. Если B \ne  \varnothing, (при этом R =\varnothing ), находим T_{\lambda } — значение времени занятости одного из процессоров, минимально превосходящее T_{\mu }.
  11. В множество строк, соответствующих множеству B процессоров с временем занятости T_{\mu }, записывается задание — простой \ubox{T_\lambda - T_{\mu}} ; для всех процессоров из B время занятости полагается равным T_{\lambda }.

  12. Проверяем, все ли задачи распределены: S_{\nu }^{*} = \varnothing? При отрицательном результате проверки выполнение алгоритма продолжаем с шага 2.

Пример. Продолжим рассмотрение G и S* (S), представленных на рис. 10.11.

  1. R = \{ 1\} ,  T_{1} = T_{2} = 0,  A = \{ 0, 0\} ,  B = \{ 1, 2\} , \beta  =\varnothing  , \sigma  =\varnothing. Задачу 1 назначаем на первый процессор и исключаем из R. После этого A = {1, 0}, B = {2}, T1 = 2. Т.к. теперь R =\varnothing  ,  B \ne  \varnothing, записываем во вторую строку \sigma "простой в 2 единицы". Таблица \sigma примет вид

    \begin{array}{c|ccc|c}
1 & 1 & & & T_1=2\\
\hline
  & \ubox{2} & 2 && T_2=2
\end{array}

  2. A = \{ 1, 0\}  ,  T_{\mu } = T_{1} = T_{2} = 2 ,  B = \{ 1, 2\}  , \beta   =\{ 1\}. После исключения из S* первой строки и первого столбца (рис. 10.12) сформируем множество входов R = {2, 3, 4} которое переупорядочим по невозрастанию времен решения задач, R = {3, 4, 2}.

    Матрица следования после первого шага распределения

    Рис. 10.12. Матрица следования после первого шага распределения

    В результате последовательного назначения задач из R таблица \sigma примет вид

    \begin{array}{c|ccc|c}
1 & 1, 3 & & & T_1=5\\
\hline
  & \ubox{2}, 4 & && T_2=4
\end{array}

  3. A = \{ 3, 4\} ,  T_{\mu } = min \{ 5, 4\}  = 4,  B = \{ 2\} , \beta  =\{ 4\}. После исключения из S* (рис. 10.13) информации о задаче 4 сформируем множество неотмеченных в A входов R = {2, 6}.

    Матрица следования после второго шага распределения

    Рис. 10.13. Матрица следования после второго шага распределения

    Таблица \sigma примет вид

    \begin{array}{c|ccc|c}
1 & 1, 3 & & & T_1=5\\
\hline
  & \ubox{2}, 4, 2 & && T_2=5
\end{array}

  4. A = \{ 3, 2\}  ,  T_{\mu } = 5 ,  B = \{ 1, 2\} , \beta  = \{ 3,2\}. После исключения (рис. 10.14) информации о задачах 3 и 2 из S* найдем R = {5, 6}. В результате последовательного назначения получаем окончательный вид таблицы \sigma.

    Матрица следования после третьего шага распределения и окончательный план выполнения работ

    Рис. 10.14. Матрица следования после третьего шага распределения и окончательный план выполнения работ

Tреш = max{T1, T2} = 7 и совпадает с точным минимальным.

Диспетчирование неоднородной ВС

Информационные графы с векторными весами вершин

Часто в состав ВС включают средства (процессоры) разной специализации и производительности. Например, МВК может комплексироваться разными ЭВМ, но допустимо исследование его как единой ВС. Новые ВС могут дополняться процессорами — эмуляторами ранее распространенных ЭВМ — для использования ранее разработанных программных продуктов. ВС, используемые в системах управления, дополняются процессорами, специализированных для решения конкретных задач, и т.д.

Появляется дополнительный выбор: на процессор какого типа возложить решение задачи? На основе каких типов процессоров с учетом количества процессоров разного типа целесообразно скомпоновать систему? Как спланировать работу неоднородной ВС таким образом, чтобы данный алгоритм выполнялся за минимальное время?

Пусть ВС комплектуется процессорами k типов по производительности и специализации. Пусть ni , i = 1 ... k, — число процессоров i -го типа. Тогда для каждой работы следует задавать не скалярный вес (такими весами мы пользовались ранее), а вектор — вес. Каждая компонента такого веса равна времени выполнения работы процессорами соответствующего типа. Например, для k = 2 граф G с векторными весами вершин представлен на рис. 10.15а, а расширенная матрица следования — на рис. 10.15б.

К распределению работ в неоднородной ВС: а — информационный граф, б — расширенная матрица следования

Рис. 10.15. К распределению работ в неоднородной ВС: а — информационный граф, б — расширенная матрица следования

На таком графе можно сформулировать оптимизационные задачи 1 и 2. Однако их методы решения весьма трудоемки (задачи экспоненциальной сложности), поэтому их заменяют эвристическими методами (полиномиальной сложности). Более того, пусть мы умеем решать задачу нахождения плана выполнения работ, минимизирующего время выполнения всего алгоритма (т.е. задачу 2). Тогда на основе этого решения можно давать заключение о возможности применения ВС в каждой конкретной комплектации, т.е. о решении задачи 1. При этом придется испытывать различные комбинации такой комплектации.

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

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >