Московский государственный университет путей сообщения
Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 2438 / 569 | Оценка: 4.07 / 4.02 | Длительность: 16:07:00
ISBN: 978-5-9556-0071-0
Специальности: Разработчик аппаратуры

Лекция 6: Оптимальное потактовое расписание выполнения работ в многофункциональном арифметическо-логическом устройстве

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >

Оптимизированная компоновка "длинных" командных слов

При оптимизированной компоновке "длинных" командных слов необходимо более полно задавать информацию о частичной упорядоченности работ, обусловленной графом на рис. 6.2. То есть необходимо использовать полное описание этого графа. При решении задач параллельного программирования для этого используются квадратные (размер m равен числу трехадресных команд линейного участка) нуль — единичные матрицы следования S, дополненные столбцами весов — времен выполнения работ. Такая матрица для нашего примера представлена на рис. 6.3. При этом работы, отраженные в графе, мы заменили номерами соответствующих трехадресных команд в таблице 6.1. Иначе говоря, мы можем забыть про изображение графа, а воспользоваться лишь программой в трехадресных командах.

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

Рис. 6.3. Матрица следования

Тогда, по аналогии с (6.11), если при совместном анализе двух команд ( i -й и j -й, i>j ) первый или второй адрес "нижней" команды совпадает с третьим адресом "верхней" команды, то элемент матрицы S на пересечении i -й строки и j -го столбца полагается равным единице (\alpha _{ij} = 1), в противном случае он равен нулю.

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

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

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

Алгоритм нахождения поздних сроков (\tau_j(T)) начала выполнения работ по треугольной матрице следования.

  1. Производим циклический обзор справа налево столбцов матрицы S, пусть j — очередной из необработанных еще столбцов. Если все столбцы обработаны, выполнение алгоритма заканчивается.
  2. Если j -й столбец не содержит единичных элементов, полагаем \tau _{jv}(T) = T. Переходим к выполнению шага 1.
  3. Если j -й столбец содержит единичные элементы, выбираем элементы \tau _{j}(T) множества \{ \tau _{j+1}(T), \dots , \tau _{m}(T)\}, соответствующие номерам единичных элементов j-го столбца.
  4. Полагаем \tau _{j}(T) = min \{ \tau _{jv}(T)\}   - t_{j}. Выполняем шаг 1.

Алгоритм нахождения объемов (\theta_j) последующих работ. Этот алгоритм содержит две части. В первой части производится дополнение матрицы следования всеми транзитивными связями, позволяющими зафиксировать полную фактическую упорядоченность работ. Вторая часть содержит нахождение указанных объемов.

Алгоритм нахождения транзитивных связей.

  1. Организуем просмотр сверху вниз строк матрицы следования S.
  2. В очередной i -й строке организуем просмотр элементов в порядке увеличения j номеров столбцов, j < i.
  3. Если (i, j) = 1, изменяем строку i ее сложением со строкой j по операции дизъюнкции.

Алгоритм нахождения объемов работ.

  1. Организуем просмотр справа налево столбцов j матрицы следования S.
  2. Находим множество {i} единичных элементов j -го столбца. Находим
    \theta_j = \sum_i t_i.

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

Теперь можем считать, что сформирована вся исходная информация для оптимизированной компоновки "длинных" командных слов.

Алгоритм 2 оптимизированной компоновки "длинных" командных слов.

  • Формируем группу команд считывания. Исключаем команды считывания из записи программы в трехадресных командах.
  • Полагаем t = 0 ( t — модельное время, номер такта).
  • Полагаем t := t +1. Приступаем к компоновке очередного командного слова.
  • Уменьшаем на единицу значения всех счетчиков времени команд, ранее назначенных (условно) на выполнение, т.е. включенных в командные слова ранее. Если назначения команд еще не было, переходим к шагу 6.
  • Исключаем из матрицы следования S строки и столбцы, соответствующие тем трехадресным командам, для которых значения счетчиков стали нулевыми.
  • Находим множество R нулевых строк матрицы следования S, соответствующих некоторой группе трехадресных команд с нулевыми значениями счетчиков времени выполнения (т.е. не назначенных ранее).
  • 7. Выполняем непосредственно компоновку очередного командного слова, стремясь заполнить все его позиции:

    записываем в первую позицию команду сложения с максимальным значением среди подобных команд сложения в R. Если с таким значением имеется более одной команды, из них выбирается команда с максимальным значением \theta. В случае успешной записи, "взводим" счетчик тактов выполнения "назначенной" команды. Команду исключаем из R.

    То же пытаемся сделать с каждой позицией "длинного" командного слова.

    Возможно получение "пустых" командных слов, требующих пропуска такта ( NOP — no operation) из-за неготовности операндов.

  • Проверяем: S = \varnothing\wedge\, R = \varnothing? Т.е. не остались ли не "назначенные" команды? Если остались — переходим к выполнению шага 2, если нет — компоновка "длинных" командных слов линейного участка завершена.

Сведем в таблицу 6.5, по тактам выполнения, действия процесса формирования программы в "длинных" командных словах по рассматриваемому примеру. "Взведение" счетчиков отмечает те такты — номера "длинных" команд, — которым эти команды соответствуют. Для краткости не будем каждый раз изображать изменяющуюся матрицу следования, приведенную на рис. 6.3 в первоначальном виде, со всей сопутствующей информацией. Сформированная программа в "длинных" командных словах приведена в таблице 6.6. Начальная пересылка данных опущена.

Таблица 6.5.
Такты 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
7 5 4 3 2 1 0 Исключение строки и столбца из матрицы S
8 5 4 3 2 1 0 Исключение ...
9 7 6 5 4 3 2 1 0 Исключение ...
10 3 2 1 0 Исключение ...
11 5 4 3 2 1 0 Исключение ...
12 7 6 5 4 3 2 1 0 Исключение ...
13 3 2 1 0 Исключение ...
14 3 2 1 0 Исключение ...
15 3 2 1 0 Исключение ...
16 3 2 1 0 Исключение ...
17 2 1 0 Исключение ...
18 3 2 1 0 Исключение ...
19 3 2 1 0 Исключение ...
20 3 2 1 0 Исключение ...
21 5 4 3 2 1 0 Исключение ...
22 7 6 5 4 3 2 1 0 Исключение ...
23 2 1 0 Исключение ...
24 1 0 Исключение ...
25 7 6 5 4 3 2 1 0 Искл.
26 7 6 5 4 3 2 1 0 Искл.
27 5 4 3 2 1 0 Исключение ...
28 3 2 1 0 Исключение ...
29 7 6 5 4 3 2 1 0 Искл.
30 2 1 0
31 2 1
32 7 6 5 4 3 2 1
33 2 1 0 Исключение ...
34
35 2 1 0 Искл.
36
37
38
39
40
41
Таблица 6.5. (продолжение с учетом исключенных команд)
Такты 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
30 Исключение ...
31 0 Исключение ...
32 0 Исключение ...
34 2 1 0 Исключение ...
36 2 1 0 Исключение ...
37 1 0 Исключение ...
38 3 2 1 0 Исключение ...
39 7 6 5 4 3 2 1 0 Исключение ...
40 5 4 3 2 1 0
41 1

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

Таблица 6.6.
"+" "+" "x" ":" ЛОГ
1. 10 13 11 9 17
2. 14 7 12
3. 15 16 8 23
4. 21
5. Пустое слово (NOP)
6. 20 22
7. NOP
8. 18 19
9. 27 29
10. NOP
11. 28 25 24
12. 26
13. NOP
14. 32 33
15. NOP
16. 35
17. NOP
18. 30
19. 31
20. NOP
21. 34
22. NOP
23. 36
24. NOP
25. 38 37
26. NOP
27. NOP
28. 39
Такты 29-34 пустые (NOP)
35. 40
Такты 36-39 пустые (NOP)
40. 41
< Лекция 5 || Лекция 6: 12345 || Лекция 7 >