Пусть на ВК или многопроцессорную ВС поступает поток заданий, которые
объединяются в пакет. Каждое задание требует запуска соответствующей программы.
Программы не зависят друг от друга, т.е. одни программы не используют
результаты
выполнения других в качестве исходных данных. Сформированный
Данная задача известна как задача о рюкзаках и отображает необходимость распределения неделимых объектов (нельзя разрезать консервную банку или спальный мешок!) так, чтобы веса рюкзаков были как можно ближе к одинаковым.
Известен "хороший" эвристический алгоритм, для которого не удалось найти пример неточного оптимального распределения.
Формируется очередь заданий (программ), представляющая собой
(рис 10.1) Множество работ, упорядоченное по невозрастанию времени выполнения
Сформулируем основное правило назначения:
Пусть заданы три процессора-исполнителя. Первоначально все исполнители свободны. Тогда их приоритет обращения к очереди определяется их номерами. Очевидно, что при трехкратном обращении к очереди (каждым процессором) их загрузка будет выглядеть, как показано на рис. 10.2.
(рис 10.2) Первый шаг распределения
Справа на рисунке показана суммарная текущая загрузка каждого исполнителя.
2. Так как теперь минимально загружен третий процессор, он выбирает работу с весом 12, и вся картина загрузки принимает вид, отраженный на рис. 10.3.
(рис 10.3) Второй шаг распределения
3. Затем последовательно назначаются на процессоры 1 и 2 работы с весами 10 и 8. Загрузка процессоров принимает вид, показанный на рис. 10.4.
(рис 10.4) Третий шаг распределения
4. Продолжая таким же образом, получим окончательный план (рис. 10.5) выполнения работ.
(рис 10.5) Окончательный план выполнения работ
Легко убедиться в том, что более "короткого" плана выполнения данного комплекса работ нет, т.е. распределение совпало с оптимальным.
В основе практических диспетчеров ВС лежат эвристические алгоритмы оптимального распараллеливания. Это обусловлено высокой сложностью методов точного решения задач распараллеливания. Реализация таких методов потребовала бы неоправданно больших затрат времени компьютера. Кроме того, подобные методы не позволяют получить гарантированные оценки времени решения: это время колеблется в большом диапазоне в зависимости от случайно складывающейся ситуации. Эвристические методы обеспечивают компромисс между временем работы диспетчера и точностью вырабатываемого расписания работы процессоров ВС.
Частичная упорядоченность заданий, точнее — программ их выполнения, означает, что одни программы используют результаты выполнения некоторых других программ данного пакета. Отражая этот факт графически и введя нумерацию программ, получают графовую структуру, показанную, например, на рис. 10.6.
(рис 10.6) Частично упорядоченное множество работ
Априорное формирование очереди невозможно, и очередность назначения работ выявляется динамически, по мере выполнения или имитации выполнения предыдущих шагов распределения заданий.
Пусть программы, образующие данную структуру, необходимо распределить между двумя процессорами так, чтобы время их совокупного выполнения — время окончания выполнения вычислительного процесса, было минимальным.
Выделяются
(рис 10.7) Первый шаг распределени
Имитируется счет времени t, чем отслеживается состояние
системы. Видно, что
только в момент t = 2, т.е. после окончания выполнения программы
№ 1, могут
появиться возможности для дальнейшего назначения. Работу №1 необходимо
исключить
из рассмотрения. Граф-схема на момент t = 2 принимает вид,
показанный на рис. 10.8.
(рис 10.8) Имитация выполнения первой работы
Вновь выделяются входы графовой структуры текущего вида. В данном примере это программы, составляющие множество {№ 2, № 3, № 4}.
Здесь целесообразно ввести в действие обязательный элемент любого
эвристического,
т.е. использующего основополагающую догадку, алгоритма решения сложной
комбинаторной задачи, к которой относится задача диспетчирования, —
Частным случаем этого правила является способ назначения заданий при отсутствии частичной упорядоченности.
В результате упорядочения программ по невозрастанию времен их выполнения
формируется очередь на данном шаге распределения:{ № 3, № 2, № 4}.
Диаграмма
последовательной однократной загрузки свободных с момента t = 2
процессоров
принимает вид, показанный на рис. 10.9.
(рис 10.9) Второй шаг распределения
Вновь включается счетчик времени, следя за состоянием системы. Очевидно,
что какие-то изменения могут наступить только в результате выполнения заданий.
В момент t = 4 заканчивается выполнение программы № 2. Хотя
новых входов в
граф-схеме не образуется, есть вход (программа № 4), оставшийся после
предыдущего
шага распределения. Программа № 4 назначается на освободившийся процессор
2.
Затем таким же образом производится назначение программ № 5 и № 6, и формируется окончательный вид (рис. 10.10) временной диаграммы выполнения пакета заданий.
(рис 10.10) Окончательный план выполнения работ
Значит, весь пакет программ выполняется за восемь условных единиц времени.
Полученный план выполнения заданий в примере совпадает с оптимальным, т.к.
более
"короткого" расписания найти невозможно. В общем случае это
свидетельствует о
том, что данный
Пусть задана (рис. 10.11) S*,
отражающая
информационные связи внутри множества m работ j = 1...m. Веса tj — времена
выполнения каждой j -й работы на каждом из n
процессоров однородной ВС с общей ОП.
(рис 10.11) Граф алгоритма и расширенная матрица следования
Необходимо составить расписание параллельного выполнения работ, при котором время выполнения всей совокупности работ минимально.
Пусть в результате распределения составляется
таблица-расписание $$\sigma,$$ содержащая n строк — расписаний одному процессору. В строке —
последовательность заданий
двух видов: t Ti, i = 1 ...
n, окончания (отсчет — от нуля) выполнения
последней работы или проcтоя, назначенных к данному шагу распределения i -му
процессору, назовем
Пусть в процессе распределения формируется таблица (множество) A номеров задач,
назначенных к данному шагу распределения последними для выполнения на каждом
процессоре. Эти номера заносятся в позиции, закрепленные за каждым процессором.
Если последним был записан
В множество B будем объединять процессоры (один или более),
имеющие на данном
шаге распределения минимальное время занятости.
В множество $$\beta$$ выделим те работы из A, которые
выполняются на процессорах из B.
Множество R — множество работ, соответствующих входам
(нулевым строкам) текущего
значения изменяемой в процессе распределения S.
Tmu = min{Ti} и множество B
номеров процессоров с найденным временем
занятости.B. После построения $$\beta$$ все позиции в A, соответствующие процессорам из B,
полагаем равными нулю. Этим моделируется окончание выполнения задач на данных
процессорах к моменту $$T_{\mu }$$.R входов R, в порядке
невозрастания времени
их выполнения.Производим поочередное назначение задач, составляющих упорядоченное
множество R, на процессоры, составляющие множество B. Назначенные
задачи исключаем из R, а процессоры, на которые произведено
назначение,
— из B. Номер каждой назначенной задачи заносим в позицию A,
соответствующую данному процессору. Время занятости этого процессора
увеличиваем на время выполнения назначенной задачи. Последовательное
назначение прекращается в одном из трех случаев: a) $$R \ne \varnothing , B = \varnothing$$ ; б) $$R = \varnothing , B =\varnothing$$ ; в) $$R =\varnothing , B \ne \varnothing$$.
Возможны и другие решающие правила, например, основанные на допустимом резерве времени до обязательного момента окончания решения и др. Применяемое здесь решающее правило обеспечивает высокое быстродействие диспетчера и достаточно редкое (менее 10 %) отклонение результатов распределения от тех же результатов, получаемых методом точного решения задачи распараллеливания.
В множество строк, соответствующих множеству B процессоров
с временем
занятости $$T_{\mu }$$, записывается задание — простой $$\ubox{T_\lambda - T_{\mu}}$$ ; для всех
процессоров из B время занятости полагается равным $$T_{\lambda }$$.
G и S* (S), представленных
на рис. 10.11.
$$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}$$
$$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}$$
$$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}$$
$$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) К распределению работ в неоднородной ВС: а — информационный граф, б — расширенная матрица следования
На таком графе можно сформулировать оптимизационные задачи 1 и 2.
Однако их методы решения весьма трудоемки (задачи
Таким образом, необходимо построить достаточно эффективный алгоритм
диспетчирования неоднородной ВС, т.е. эвристический алгоритм планирования
выполнения за минимальное время алгоритма, заданного
В основе диспетчера лежит следующее
Введем сквозную нумерацию процессоров от 1 до $$N = \sum_{i=1}^k
n_i$$. Зададим вес {tj1 ... tjN} j -й вершины (j = 1 ... m; m
— размер матрицы S или объем буфера диспетчера)
так, что при новой нумерации процессоров tjl — время
выполнения j -й работы l -м процессором. Например, при k = 2, n1 = 1, n2 =
2
В процессе распределения работ будем формировать расписание в виде таблицы $$\tau,$$
состоящей из N строк, каждая из которых соответствует одному
процессору. В
строке будем записывать последовательность заданий одному процессору. Задания
имеют два вида: выполнить работу $$\alpha,$$ простоять t
единиц времени
(изображается $$\ubox{t}$$ ). Момент Ti , i = 1 ...
N, окончания (отсчет ведется
от нуля) выполнения последней работы или простоя, назначенных к данному моменту
распределения i -му процессору, назовем
В процессе распределения и имитации выполнения работ будем использовать
множество A номеров работ, уже назначенных на процессоры, но не
выполненных в анализируемый момент времени. A представляет собой
таблицу, содержащую пары "назначенная для выполнения задача — время
окончания ее выполнения ", т.е. $$A = \{ \alpha _{j} \leftrightarrow t_{j}\}$$.
Множество R — множество работ, соответствующих не
назначенным входам (нулевым
строкам) текущего значения изменяемой S.
A значение tmu = minj
{ti} и множество $$B \subseteq A$$ номеров работ,
назначенных на процессоры и закончивших выполнение к моменту $$t_{\mu }$$. Полагаем
равными нулю все позиции A, составляющие B. Этим
имитируется окончание выполнения
работ на процессорах к моменту времени $$t_{\mu }$$.B,
после чего матрицу $$S_{\nu } (S^{*}_{\nu })$$ уплотним. Полагаем $$\nu := \nu + 1$$. Таким образом
сформируется матрица $$S_{\nu }$$ (а также $$S^{*}_{\nu }$$ ) на
новом шаге распределения.R — входов {tp1 ... tpN}, p = 1 ... r. Формируем суммы Tl + tpl , l = 1 ... N,
p = 1 ... r. Для каждого значения p (т.е. для каждой
работы из R ) находим
минимальную (по l ) из таких сумм, т.е. для каждой работы находим
один или
несколько процессоров, на которых время окончания выполнения этой работы
минимально
при текущих значениях занятости процессоров. Найденные суммы сведем в
невозрастающую последовательность R*, состоящую из r чисел. При этом сохраним
информацию о соответствии процессорам.p -й работе, представленной в
последовательности R*, значение $$\sigma _{p}$$, равное числу процессоров,
при выполнении на которых достигается
найденное минимальное время окончания выполнения этой работы.N работ слева направо в соответствии с
вхождением времени
окончания их выполнения в последовательность R*. Каждую p -ю работу назначаем на
все те процессоры, (их число равно $$\sigma _{p}$$ ), на которых
достигается входящее в R* время окончания выполнения. В результате те работы, для
которых $$\sigma > 1$$, окажутся
назначенными более чем на один процессор, а на один процессор на данном шаге
могут оказаться назначенными более одной работы. Чтобы определить окончательно,
на какой процессор должна быть назначена p -я работа,
воспользуемся следующей p -я,
работа, считаем ее окончательно закрепленной за данным процессором, и, если $$\sigma _{p} > 1$$, исключаем ее из рассмотрения при анализе
последующих процессоров — т.е.,
снимаем ее с назначения на другие процессоры. Если на процессор назначено
более
одной работы, закрепляем за процессором лишь ту работу $$\alpha _{p}$$,
которая имеет
минимальное значение $$\sigma _{p}$$. Если несколько работ имеют равное
минимальное значение $$\sigma _{p}$$, назначаем любую (первую) из них. Для множества работ $$\{ \gamma \}$$, отклоненных от
назначения на данный процессор, полагаем $$\sigma _{\gamma } := \sigma _{\gamma }- 1$$. Значение $$\sigma _{\gamma } = 0$$ означает,
что работе $$\gamma$$ отказано в назначении на данном шаге
распределения. Назначенную
работу исключаем из рассмотрения при анализе следующих процессоров. Номера
назначенных работ оказываются записанными в строки таблицы $$\tau,$$
соответствующие
процессорам. Эти номера исключаем из R. Номер каждой назначенной
работы и время
окончания ее выполнения (оно же — время занятости процессора) заносим в A.При k = 2, n1 = 1, n2 = 2, (N = 3) распределим работы,
отображенные
(рис 10.16) Преобразование расширенной матрицы следования
A работу 1 с минимальным временем окончания
выполнения, равным 1.
Записываем простои в одну единицу времени процессорам 2 и 3. Таблица $$\tau$$ принимает вид$$\begin{array}{l|l@{\qquad}|l}
1 1 T_1=1\\
\hline
2 \ubox{1} T_2=1\\
\hline
3 \ubox1 T_3=1
\end{array}$$
После исключения первой строки и первого столбца из S1
(т.е. по матрице S2 )
найдем R = {2, 3, 4, 6}. Составим таблицу 10.1 времени
окончания выполнения
каждой работы из R каждым процессором l = 1, 2, 3. Минимальное
время окончания
выполнения каждой работы выделено.
| l | Tl+t2l | Tl+t3l | Tl+t4l | Tl+t6l |
|---|---|---|---|---|
| 1 | 4 | 3 | 6 | 4 |
| 2 | 3 | 6 | 6 | 2 |
| 3 | 3 | 6 | 6 | 2 |
Формируем последовательность $$R^{*} = \{ 6 (4; 1, 2, 3, \sigma _{4} = 3), 3(2; 2,3$$, $$\sigma _{2} = 2), 3( 3; 1, \sigma _{3} = 1), 2 (6; 2,3,\sigma _{6} = 2)\}$$, где в круглых скобках указаны номер работы, список процессоров, на которых достигается минимальное время окончания ее выполнения, и число $$\sigma _{p}$$ этих процессоров.
Назначим первоначально (таблица 10.2) работу 4 на процессоры 1, 2, 3, работу 2 — на процессоры 2 и 3 , работу 3 — на процессор 1.
| 1 | 4 ( $$\sigma$$ 4 = 3), 3( $$\sigma$$ 3 = 1) |
| 2 | 4 ( $$\sigma$$ 4 = 3), 2( $$\sigma$$ 2 = 2) |
| 3 | 4 ( $$\sigma$$ 4 = 3), 2( $$\sigma$$ 2 = 2) |
После анализа значений $$\sigma _{p}$$ оставим на процессоре 1 работу 3 (после чего $$\sigma _{4} = 2$$ ), на процессоре 2 — работу 4 (после чего $$\sigma _{2} = 1$$ ), на процессоре 3 — работу 2, $$A = \setminus \{ 3 \leftrightarrow 3, 4 \leftrightarrow 6, 2\leftrightarrow 3\setminus \}$$. Таблица распределения $$\tau$$ примет вид$$\begin{array}{c|c|c} 1 1, 3 T_1 = 3\\ \hline 2 \ubox 1, 4 T_2 = 6\\ \hline 3 \ubox 1, 2 T_3 = 3 \end{array}$$
B = {2, 3}. После исключения строк и столбцов,
соответствующих работам
2 и 3, из матрицы S2, т.е. по сформированной матрице S3, найдем R = {5, 6}.
Составим таблица 10.3 значений времени окончания выполнения каждой работы из R каждым процессором.
| l | Tl+t5l | Tl+t6l |
|---|---|---|
| 1 | 5 | 6 |
| 2 | 10 | 7 |
| 3 | 7 | 4 |
Из таблицы найдем $$R^{*} = \{ 5 (5; 1, \sigma _{5} = 1), 4 (6; 3, \sigma _{6} =1)\}$$,
Назначим работу 5 на процессор 1, работу 6 — на процессор 3, $$A =\{ 5 \leftrightarrow 5,4 \leftrightarrow 6, 6 \leftrightarrow 4\}$$. Таблица распределения $$\tau$$ примет вид$$\begin{array}{c|c|c} 1 1, 3, 5 T_1 = 5\\ \hline 2 \ubox1, 4 T_2 = 6\\ \hline 3 \ubox 1, 2, 6 T_3 = 4 \end{array}$$
B = {6}. После исключения строки и столбца,
соответствующих работе 6, из
матрицы следования S3, т.е. по сформированной матрице S4, найдем $$R = \varnothing$$.
Назначим процессору 3 простой в течение одной условной единицы времени.
Таблица $$\tau$$ примет вид$$\begin{array}{c|c|c}
1 1, 3, 5, T_1> = 5\\
\hline
2 \ubox 1, 4 T_2 = 6\\
\hline
3 \ubox 1, 2, 6, \ubox1 T_3 = 5
\end{array}$$
B = {5}. После преобразования матрицы S4,
т.е. по матрице S5, найдем R = {7, 8}. Из таблицы 10.4, аналогичной таблице 3, найдем $$R^{*} = \{ 9 (8;1, \sigma _{8} = 1), 7 (7; 3, \sigma _{7} = 1)\} .$$
| l | Tl+t7l | Tl+t8l |
|---|---|---|
| 1 | 9 | 9 |
| 2 | 8 | 11 |
| 3 | 7 | 10 |
Назначаем работу 8 на процессор 1, работу 7 — на процессор 3. Таблица $$\tau$$ примет вид$$\begin{array}{c|c|c} 1 1, 3, 5, 8 T_1 = 9\\ \hline 2 \ubox 1, 4 T_2 = 6\\ \hline 3 \ubox 1, 2, 6, \ubox 1, 7 T_3 = 7 \end{array}$$
B = {4}. После исключения строки и столбца,
соответствующих работе 4,
из матрицы следования S5, т.е. по сформированной при этом
матрице S6,
найдем R = {9}. Время окончания выполнения работы 9 на
процессорах равно
соответственно 10, 8, 9. Назначаем работу 9 на процессор 2. Таблица $$\tau$$
примет окончательный вид$$\begin{array}{c|c|c}
1 1, 3, 5, 8 T_1 = 9\\
\hline
2 \ubox1, 4, 9 T_2 = 8\\
\hline
3 \ubox 1, 2, 6, \ubox 1, 7 T_3 = 7.
\end{array}$$
k = 1.
Он применим и в другом частном случае: когда отсутствует частичная
упорядоченность
работ, то есть когда надо разделить "поровну" n исполнителями. Наглядный пример такого распределения составляет
Пусть на ВК или многопроцессорную ВС поступает поток заданий, которые
объединяются в пакет. Каждое задание требует запуска соответствующей программы.
Программы не зависят друг от друга, т.е. одни программы не используют
результаты
выполнения других в качестве исходных данных. Сформированный
Данная задача известна как задача о рюкзаках и отображает необходимость распределения неделимых объектов (нельзя разрезать консервную банку или спальный мешок!) так, чтобы веса рюкзаков были как можно ближе к одинаковым.
Известен "хороший" эвристический алгоритм, для которого не удалось найти пример неточного оптимального распределения.
Формируется очередь заданий (программ), представляющая собой
(рис 10.1) Множество работ, упорядоченное по невозрастанию времени выполнения
Сформулируем основное правило назначения:
Пусть заданы три процессора-исполнителя. Первоначально все исполнители свободны. Тогда их приоритет обращения к очереди определяется их номерами. Очевидно, что при трехкратном обращении к очереди (каждым процессором) их загрузка будет выглядеть, как показано на рис. 10.2.
(рис 10.2) Первый шаг распределения
Справа на рисунке показана суммарная текущая загрузка каждого исполнителя.
2. Так как теперь минимально загружен третий процессор, он выбирает работу с весом 12, и вся картина загрузки принимает вид, отраженный на рис. 10.3.
(рис 10.3) Второй шаг распределения
3. Затем последовательно назначаются на процессоры 1 и 2 работы с весами 10 и 8. Загрузка процессоров принимает вид, показанный на рис. 10.4.
(рис 10.4) Третий шаг распределения
4. Продолжая таким же образом, получим окончательный план (рис. 10.5) выполнения работ.
(рис 10.5) Окончательный план выполнения работ
Легко убедиться в том, что более "короткого" плана выполнения данного комплекса работ нет, т.е. распределение совпало с оптимальным.
В основе практических диспетчеров ВС лежат эвристические алгоритмы оптимального распараллеливания. Это обусловлено высокой сложностью методов точного решения задач распараллеливания. Реализация таких методов потребовала бы неоправданно больших затрат времени компьютера. Кроме того, подобные методы не позволяют получить гарантированные оценки времени решения: это время колеблется в большом диапазоне в зависимости от случайно складывающейся ситуации. Эвристические методы обеспечивают компромисс между временем работы диспетчера и точностью вырабатываемого расписания работы процессоров ВС.
Частичная упорядоченность заданий, точнее — программ их выполнения, означает, что одни программы используют результаты выполнения некоторых других программ данного пакета. Отражая этот факт графически и введя нумерацию программ, получают графовую структуру, показанную, например, на рис. 10.6.
(рис 10.6) Частично упорядоченное множество работ
Априорное формирование очереди невозможно, и очередность назначения работ выявляется динамически, по мере выполнения или имитации выполнения предыдущих шагов распределения заданий.
Пусть программы, образующие данную структуру, необходимо распределить между двумя процессорами так, чтобы время их совокупного выполнения — время окончания выполнения вычислительного процесса, было минимальным.
Выделяются
(рис 10.7) Первый шаг распределени
Имитируется счет времени t, чем отслеживается состояние
системы. Видно, что
только в момент t = 2, т.е. после окончания выполнения программы
№ 1, могут
появиться возможности для дальнейшего назначения. Работу №1 необходимо
исключить
из рассмотрения. Граф-схема на момент t = 2 принимает вид,
показанный на рис. 10.8.
(рис 10.8) Имитация выполнения первой работы
Вновь выделяются входы графовой структуры текущего вида. В данном примере это программы, составляющие множество {№ 2, № 3, № 4}.
Здесь целесообразно ввести в действие обязательный элемент любого
эвристического,
т.е. использующего основополагающую догадку, алгоритма решения сложной
комбинаторной задачи, к которой относится задача диспетчирования, —
Частным случаем этого правила является способ назначения заданий при отсутствии частичной упорядоченности.
В результате упорядочения программ по невозрастанию времен их выполнения
формируется очередь на данном шаге распределения:{ № 3, № 2, № 4}.
Диаграмма
последовательной однократной загрузки свободных с момента t = 2
процессоров
принимает вид, показанный на рис. 10.9.
(рис 10.9) Второй шаг распределения
Вновь включается счетчик времени, следя за состоянием системы. Очевидно,
что какие-то изменения могут наступить только в результате выполнения заданий.
В момент t = 4 заканчивается выполнение программы № 2. Хотя
новых входов в
граф-схеме не образуется, есть вход (программа № 4), оставшийся после
предыдущего
шага распределения. Программа № 4 назначается на освободившийся процессор
2.
Затем таким же образом производится назначение программ № 5 и № 6, и формируется окончательный вид (рис. 10.10) временной диаграммы выполнения пакета заданий.
(рис 10.10) Окончательный план выполнения работ
Значит, весь пакет программ выполняется за восемь условных единиц времени.
Полученный план выполнения заданий в примере совпадает с оптимальным, т.к.
более
"короткого" расписания найти невозможно. В общем случае это
свидетельствует о
том, что данный
Пусть задана (рис. 10.11) S*,
отражающая
информационные связи внутри множества m работ j = 1...m. Веса tj — времена
выполнения каждой j -й работы на каждом из n
процессоров однородной ВС с общей ОП.
(рис 10.11) Граф алгоритма и расширенная матрица следования
Необходимо составить расписание параллельного выполнения работ, при котором время выполнения всей совокупности работ минимально.
Пусть в результате распределения составляется
таблица-расписание $$\sigma,$$ содержащая n строк — расписаний одному процессору. В строке —
последовательность заданий
двух видов: t Ti, i = 1 ...
n, окончания (отсчет — от нуля) выполнения
последней работы или проcтоя, назначенных к данному шагу распределения i -му
процессору, назовем
Пусть в процессе распределения формируется таблица (множество) A номеров задач,
назначенных к данному шагу распределения последними для выполнения на каждом
процессоре. Эти номера заносятся в позиции, закрепленные за каждым процессором.
Если последним был записан
В множество B будем объединять процессоры (один или более),
имеющие на данном
шаге распределения минимальное время занятости.
В множество $$\beta$$ выделим те работы из A, которые
выполняются на процессорах из B.
Множество R — множество работ, соответствующих входам
(нулевым строкам) текущего
значения изменяемой в процессе распределения S.
Tmu = min{Ti} и множество B
номеров процессоров с найденным временем
занятости.B. После построения $$\beta$$ все позиции в A, соответствующие процессорам из B,
полагаем равными нулю. Этим моделируется окончание выполнения задач на данных
процессорах к моменту $$T_{\mu }$$.R входов R, в порядке
невозрастания времени
их выполнения.Производим поочередное назначение задач, составляющих упорядоченное
множество R, на процессоры, составляющие множество B. Назначенные
задачи исключаем из R, а процессоры, на которые произведено
назначение,
— из B. Номер каждой назначенной задачи заносим в позицию A,
соответствующую данному процессору. Время занятости этого процессора
увеличиваем на время выполнения назначенной задачи. Последовательное
назначение прекращается в одном из трех случаев: a) $$R \ne \varnothing , B = \varnothing$$ ; б) $$R = \varnothing , B =\varnothing$$ ; в) $$R =\varnothing , B \ne \varnothing$$.
Возможны и другие решающие правила, например, основанные на допустимом резерве времени до обязательного момента окончания решения и др. Применяемое здесь решающее правило обеспечивает высокое быстродействие диспетчера и достаточно редкое (менее 10 %) отклонение результатов распределения от тех же результатов, получаемых методом точного решения задачи распараллеливания.
В множество строк, соответствующих множеству B процессоров
с временем
занятости $$T_{\mu }$$, записывается задание — простой $$\ubox{T_\lambda - T_{\mu}}$$ ; для всех
процессоров из B время занятости полагается равным $$T_{\lambda }$$.
G и S* (S), представленных
на рис. 10.11.
$$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}$$
$$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}$$
$$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}$$
$$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) К распределению работ в неоднородной ВС: а — информационный граф, б — расширенная матрица следования
На таком графе можно сформулировать оптимизационные задачи 1 и 2.
Однако их методы решения весьма трудоемки (задачи
Таким образом, необходимо построить достаточно эффективный алгоритм
диспетчирования неоднородной ВС, т.е. эвристический алгоритм планирования
выполнения за минимальное время алгоритма, заданного
В основе диспетчера лежит следующее
Введем сквозную нумерацию процессоров от 1 до $$N = \sum_{i=1}^k
n_i$$. Зададим вес {tj1 ... tjN} j -й вершины (j = 1 ... m; m
— размер матрицы S или объем буфера диспетчера)
так, что при новой нумерации процессоров tjl — время
выполнения j -й работы l -м процессором. Например, при k = 2, n1 = 1, n2 =
2
В процессе распределения работ будем формировать расписание в виде таблицы $$\tau,$$
состоящей из N строк, каждая из которых соответствует одному
процессору. В
строке будем записывать последовательность заданий одному процессору. Задания
имеют два вида: выполнить работу $$\alpha,$$ простоять t
единиц времени
(изображается $$\ubox{t}$$ ). Момент Ti , i = 1 ...
N, окончания (отсчет ведется
от нуля) выполнения последней работы или простоя, назначенных к данному моменту
распределения i -му процессору, назовем
В процессе распределения и имитации выполнения работ будем использовать
множество A номеров работ, уже назначенных на процессоры, но не
выполненных в анализируемый момент времени. A представляет собой
таблицу, содержащую пары "назначенная для выполнения задача — время
окончания ее выполнения ", т.е. $$A = \{ \alpha _{j} \leftrightarrow t_{j}\}$$.
Множество R — множество работ, соответствующих не
назначенным входам (нулевым
строкам) текущего значения изменяемой S.
A значение tmu = minj
{ti} и множество $$B \subseteq A$$ номеров работ,
назначенных на процессоры и закончивших выполнение к моменту $$t_{\mu }$$. Полагаем
равными нулю все позиции A, составляющие B. Этим
имитируется окончание выполнения
работ на процессорах к моменту времени $$t_{\mu }$$.B,
после чего матрицу $$S_{\nu } (S^{*}_{\nu })$$ уплотним. Полагаем $$\nu := \nu + 1$$. Таким образом
сформируется матрица $$S_{\nu }$$ (а также $$S^{*}_{\nu }$$ ) на
новом шаге распределения.R — входов {tp1 ... tpN}, p = 1 ... r. Формируем суммы Tl + tpl , l = 1 ... N,
p = 1 ... r. Для каждого значения p (т.е. для каждой
работы из R ) находим
минимальную (по l ) из таких сумм, т.е. для каждой работы находим
один или
несколько процессоров, на которых время окончания выполнения этой работы
минимально
при текущих значениях занятости процессоров. Найденные суммы сведем в
невозрастающую последовательность R*, состоящую из r чисел. При этом сохраним
информацию о соответствии процессорам.p -й работе, представленной в
последовательности R*, значение $$\sigma _{p}$$, равное числу процессоров,
при выполнении на которых достигается
найденное минимальное время окончания выполнения этой работы.N работ слева направо в соответствии с
вхождением времени
окончания их выполнения в последовательность R*. Каждую p -ю работу назначаем на
все те процессоры, (их число равно $$\sigma _{p}$$ ), на которых
достигается входящее в R* время окончания выполнения. В результате те работы, для
которых $$\sigma > 1$$, окажутся
назначенными более чем на один процессор, а на один процессор на данном шаге
могут оказаться назначенными более одной работы. Чтобы определить окончательно,
на какой процессор должна быть назначена p -я работа,
воспользуемся следующей p -я,
работа, считаем ее окончательно закрепленной за данным процессором, и, если $$\sigma _{p} > 1$$, исключаем ее из рассмотрения при анализе
последующих процессоров — т.е.,
снимаем ее с назначения на другие процессоры. Если на процессор назначено
более
одной работы, закрепляем за процессором лишь ту работу $$\alpha _{p}$$,
которая имеет
минимальное значение $$\sigma _{p}$$. Если несколько работ имеют равное
минимальное значение $$\sigma _{p}$$, назначаем любую (первую) из них. Для множества работ $$\{ \gamma \}$$, отклоненных от
назначения на данный процессор, полагаем $$\sigma _{\gamma } := \sigma _{\gamma }- 1$$. Значение $$\sigma _{\gamma } = 0$$ означает,
что работе $$\gamma$$ отказано в назначении на данном шаге
распределения. Назначенную
работу исключаем из рассмотрения при анализе следующих процессоров. Номера
назначенных работ оказываются записанными в строки таблицы $$\tau,$$
соответствующие
процессорам. Эти номера исключаем из R. Номер каждой назначенной
работы и время
окончания ее выполнения (оно же — время занятости процессора) заносим в A.При k = 2, n1 = 1, n2 = 2, (N = 3) распределим работы,
отображенные
(рис 10.16) Преобразование расширенной матрицы следования
A работу 1 с минимальным временем окончания
выполнения, равным 1.
Записываем простои в одну единицу времени процессорам 2 и 3. Таблица $$\tau$$ принимает вид$$\begin{array}{l|l@{\qquad}|l}
1 1 T_1=1\\
\hline
2 \ubox{1} T_2=1\\
\hline
3 \ubox1 T_3=1
\end{array}$$
После исключения первой строки и первого столбца из S1
(т.е. по матрице S2 )
найдем R = {2, 3, 4, 6}. Составим таблицу 10.1 времени
окончания выполнения
каждой работы из R каждым процессором l = 1, 2, 3. Минимальное
время окончания
выполнения каждой работы выделено.
| l | Tl+t2l | Tl+t3l | Tl+t4l | Tl+t6l |
|---|---|---|---|---|
| 1 | 4 | 3 | 6 | 4 |
| 2 | 3 | 6 | 6 | 2 |
| 3 | 3 | 6 | 6 | 2 |
Формируем последовательность $$R^{*} = \{ 6 (4; 1, 2, 3, \sigma _{4} = 3), 3(2; 2,3$$, $$\sigma _{2} = 2), 3( 3; 1, \sigma _{3} = 1), 2 (6; 2,3,\sigma _{6} = 2)\}$$, где в круглых скобках указаны номер работы, список процессоров, на которых достигается минимальное время окончания ее выполнения, и число $$\sigma _{p}$$ этих процессоров.
Назначим первоначально (таблица 10.2) работу 4 на процессоры 1, 2, 3, работу 2 — на процессоры 2 и 3 , работу 3 — на процессор 1.
| 1 | 4 ( $$\sigma$$ 4 = 3), 3( $$\sigma$$ 3 = 1) |
| 2 | 4 ( $$\sigma$$ 4 = 3), 2( $$\sigma$$ 2 = 2) |
| 3 | 4 ( $$\sigma$$ 4 = 3), 2( $$\sigma$$ 2 = 2) |
После анализа значений $$\sigma _{p}$$ оставим на процессоре 1 работу 3 (после чего $$\sigma _{4} = 2$$ ), на процессоре 2 — работу 4 (после чего $$\sigma _{2} = 1$$ ), на процессоре 3 — работу 2, $$A = \setminus \{ 3 \leftrightarrow 3, 4 \leftrightarrow 6, 2\leftrightarrow 3\setminus \}$$. Таблица распределения $$\tau$$ примет вид$$\begin{array}{c|c|c} 1 1, 3 T_1 = 3\\ \hline 2 \ubox 1, 4 T_2 = 6\\ \hline 3 \ubox 1, 2 T_3 = 3 \end{array}$$
B = {2, 3}. После исключения строк и столбцов,
соответствующих работам
2 и 3, из матрицы S2, т.е. по сформированной матрице S3, найдем R = {5, 6}.
Составим таблица 10.3 значений времени окончания выполнения каждой работы из R каждым процессором.
| l | Tl+t5l | Tl+t6l |
|---|---|---|
| 1 | 5 | 6 |
| 2 | 10 | 7 |
| 3 | 7 | 4 |
Из таблицы найдем $$R^{*} = \{ 5 (5; 1, \sigma _{5} = 1), 4 (6; 3, \sigma _{6} =1)\}$$,
Назначим работу 5 на процессор 1, работу 6 — на процессор 3, $$A =\{ 5 \leftrightarrow 5,4 \leftrightarrow 6, 6 \leftrightarrow 4\}$$. Таблица распределения $$\tau$$ примет вид$$\begin{array}{c|c|c} 1 1, 3, 5 T_1 = 5\\ \hline 2 \ubox1, 4 T_2 = 6\\ \hline 3 \ubox 1, 2, 6 T_3 = 4 \end{array}$$
B = {6}. После исключения строки и столбца,
соответствующих работе 6, из
матрицы следования S3, т.е. по сформированной матрице S4, найдем $$R = \varnothing$$.
Назначим процессору 3 простой в течение одной условной единицы времени.
Таблица $$\tau$$ примет вид$$\begin{array}{c|c|c}
1 1, 3, 5, T_1> = 5\\
\hline
2 \ubox 1, 4 T_2 = 6\\
\hline
3 \ubox 1, 2, 6, \ubox1 T_3 = 5
\end{array}$$
B = {5}. После преобразования матрицы S4,
т.е. по матрице S5, найдем R = {7, 8}. Из таблицы 10.4, аналогичной таблице 3, найдем $$R^{*} = \{ 9 (8;1, \sigma _{8} = 1), 7 (7; 3, \sigma _{7} = 1)\} .$$
| l | Tl+t7l | Tl+t8l |
|---|---|---|
| 1 | 9 | 9 |
| 2 | 8 | 11 |
| 3 | 7 | 10 |
Назначаем работу 8 на процессор 1, работу 7 — на процессор 3. Таблица $$\tau$$ примет вид$$\begin{array}{c|c|c} 1 1, 3, 5, 8 T_1 = 9\\ \hline 2 \ubox 1, 4 T_2 = 6\\ \hline 3 \ubox 1, 2, 6, \ubox 1, 7 T_3 = 7 \end{array}$$
B = {4}. После исключения строки и столбца,
соответствующих работе 4,
из матрицы следования S5, т.е. по сформированной при этом
матрице S6,
найдем R = {9}. Время окончания выполнения работы 9 на
процессорах равно
соответственно 10, 8, 9. Назначаем работу 9 на процессор 2. Таблица $$\tau$$
примет окончательный вид$$\begin{array}{c|c|c}
1 1, 3, 5, 8 T_1 = 9\\
\hline
2 \ubox1, 4, 9 T_2 = 8\\
\hline
3 \ubox 1, 2, 6, \ubox 1, 7 T_3 = 7.
\end{array}$$
k = 1.
Он применим и в другом частном случае: когда отсутствует частичная
упорядоченность
работ, то есть когда надо разделить "поровну" n исполнителями. Наглядный пример такого распределения составляет
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.