Попробуем выработать рекомендации по совместному программированию обработки вариантов счета, обработки элементов массива и др., что позволяет увеличить эффективность использования многофункциональных АЛУ.
Методы вычислений отличаются регулярностью действий. На их основе можно строить эффективные схемы вычислений с использованием многофункциональных АЛУ, в том числе — в архитектурах, сводящихся к "длинным" командным словам.
Рассмотрим пример распараллеливания типичного фрагмента обработки нейросети в режиме распознавания. Он демонстрирует способ оптимальной реализации на процессоре, где АЛУ содержит несколько исполнительных устройств (ИУ) различной специализации, функций нейрокомпьютера. Максимальная загрузка всех устройств возможна тогда, когда в каждом линейном участке программы предусмотрена обработка не одного, а нескольких нейронов сети. Покажем это на фрагменте алгоритма имитации работы нейронов в режиме распознавания, т.е. в режиме, требующем максимальной производительности нейрокомпьютера.
В режиме распознавания в простейшей модели нейрона решается задача
суммирования взвешенных, в соответствии с регулируемыми на этапе обучения весами {wi},i = 1, ..., n,
{xi} и сравнение
полученной суммы с порогом h. Если сумма превышает порог, происходит
возбуждение нейрона с величиной y:$$y =
\left\{
\begin{array}{ll}
\Delta = \sum\limits_{i=1}^n w_i x_i - h, \t{ при } \Delta > 0, \\
0, \t{ при } \Delta \leqslant 0. \\
\end{array}
\right.$$
Для n = 3 запишем в трехадресных командах программу
одновременной обработки двух
нейронов. Это двукратное повторение одной и той же последовательности команд,
отличающейся используемыми адресами (табл. 7.1).
| № | КОП | A1 | A2 | A3 |
|---|---|---|---|---|
| 1 | x | <w11> | <x11> | r1 |
| 2 | x | <w12> | <x12> | r2 |
| 3 | x | <w13> | <x13> | r3 |
| 4 | + | r1 | r2 | r4 |
| 5 | + | r3 | r4 | r5 |
| 6 | - | r5 | <h1> | r6 |
| 7 | > | r6 | r7 | |
| 8 | if... | r7 | r6 | <y1> |
| 0 | ||||
| 9 | x | <w21> | <x21> | r8 |
| 10 | x | <w22> | <x22> | r9 |
| 11 | x | <w23> | <x23> | r10 |
| 12 | + | r8 | r9 | r11 |
| 13 | + | r10 | r11 | r12 |
| 14 | - | r12 | <h2> | r13 |
| 15 | > | r13 | r14 | |
| 16 | if... | r14 | r13 | <y2> |
| 0 |
Очевидно, программа совместной обработки трех нейронов будет содержать трехкратное повторение такого же участка и т.д.
Выше было показано, что при решении задач параллельного программирования
для полного задания информации о частичной упорядоченности работ целесообразно
использовать квадратные (размер m равен числу трехадресных команд
линейного участка) нуль-единичные S, дополненные
столбцами весов — времен выполнения работ.
Такая матрица для нашего примера представлена в таблице 7.2, где кроме весов
указаны также поздние сроки $$\tau$$ начала выполнения команд (для
суммы всех времен выполнения работ Т = 56 ) и объемы $$\theta$$ последующих работ. Эти
значения найдены по
приведенным выше алгоритмам. Если при совместном анализе двух команд
( i -й и j -й, i>j ) первый или второй адрес "нижней" команды
совпадает с третьим адресом
"верхней" команды, то элемент матрицы S на
пересечении i -й строки и j -го столбца
полагается равным единице $$\alpha _{ij} = 1$$, в противном случае
он равен нулю.
Этот алгоритм формирования
В приведенной матрице отражены и
| T | $$\tau$$ | $$\theta$$ | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 5 | 38 | 18 | ||||||||||||||||
| 2 | 5 | 38 | 18 | ||||||||||||||||
| 3 | 5 | 41 | 15 | ||||||||||||||||
| 4 | 1 | 1 | 3 | 43 | 13 | ||||||||||||||
| 5 | 1 | 1 | 1 | 1 | 3 | 46 | 10 | ||||||||||||
| 6 | 1 | 1 | 1 | 1 | 1 | 3 | 49 | 7 | |||||||||||
| 7 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 52 | 4 | ||||||||||
| 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 54 | 2 | |||||||||
| 9 | 5 | 38 | 18 | ||||||||||||||||
| 10 | 5 | 38 | 18 | ||||||||||||||||
| 11 | 5 | 41 | 15 | ||||||||||||||||
| 12 | 1 | 1 | 3 | 43 | 13 | ||||||||||||||
| 13 | 1 | 1 | 1 | 1 | 3 | 46 | 10 | ||||||||||||
| 14 | 1 | 1 | 1 | 1 | 1 | 3 | 49 | 7 | |||||||||||
| 15 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 52 | 4 | ||||||||||
| 16 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 54 | 2 |
Выберем структуру АЛУ, содержащую два ИУ сложения, два — умножения, два — логических. Остальные ИУ нам в примере не понадобятся. В командных словах также предположим обязательное присутствие позиций, соответствующих этим ИУ.
В таблице 7.3 отражена временная диаграмма условного назначения
(формирования "длинного" командного слова) и имитации выполнения трехадресных
команд. Алгоритм формирования, выполнение которого сопровождается исключением из матрицы S строк и столбцов, соответствующих "выполненным" командам, изложен выше.
| Такты | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем строку и столбец из матрицы S | |||||||||||||
| 2 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 3 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 5 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 6 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 7 | 2 | 1 | 0 | Исключаем ... | ||||||||||||||||
| 8 | 2 | 1 | 0 | И | ||||||||||||||||
| 9 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 10 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 11 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 12 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 13 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 14 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 15 | 2 | 1 | 0 | Искл. | ||||||||||||||||
| 16 | 2 | 1 | 0 | |||||||||||||||||
"Назначенные" работы (трехадресные команды) и такты, в которые
они назначены, соответствуют "длинным" командам. Как видно из таблицы —
диаграммы, программа изобилует пропусками тактов,
Предположим наличие
| № | + | + | x | x | ЛОГ | ЛОГ |
|---|---|---|---|---|---|---|
| 1 | 1 | 2 | ||||
| 2 | 9 | 10 | ||||
| 3 | 3 | 11 | ||||
| 4 | 4 | 12 | ||||
| 5 | 5 | 13 | ||||
| 6 | 7 | 15 | ||||
| 7 | 8 | 16 |
Несмотря на то, что мы не можем считать рассмотренный в основной части пример характерным, он наводит на мысль о необходимости полного статистического анализа целесообразности оптимизации компоновки "длинных" командных слов. Сложность такой компоновки, возможно, компенсируется простотой получения программы в результате "быстрой" компоновки, если учитывать совокупную стоимость разработки и выполнения программ. Очевидно, что эта проблема требует изучения на основе моделирования.
Архитектура ВС с управляемой в каждом такте работой исполнительных устройств выявляет определенные правила по организации вычислений. На примере показана целесообразность совместной обработки нескольких элементов массива — в обобщенном понятии. Такая обработка обеспечивает максимальную загрузку оборудования, т.е. максимальное значение коэффициента загрузки исполнительных устройств АЛУ.
Выше мы указывали, что все сделанное теперь требует перекомпоновки, сжатия каждого слова для получения командных слов переменной длины. Каждое слово (впереди указывается его длина) должно нести смысловую нагрузку: "что и какое именно устройство должно в данном очередном такте начать выполнять".
Рассмотрим еще один, более конкретный пример компоновки "длинного" командного слова для ВС, разрабатываемой в 1970-е годы. Проект, основанный на архитектуре "в остаточных классах", не получил должного освещения в годы "холодной войны", тем более, что авторы сами перестали настаивать на его воплощении. Но это был, по-видимому, первый в мире опыт реализации принципа "длинного" командного слова.
Пусть АЛУ процессора ВС состоит из трех многофункциональных блоков ИУ, работающих синхронно. Два блока — универсальные, они содержат специализированные по операциям ИУ (будем называть их основными ИУ) и с их помощью выполняют основной набор операций. Третий блок ИУ обеспечивает обмен СОЗУ (с регистрами которого и только которого работают основные ИУ) с памятью других уровней. Синхронизация работы блоков ИУ осуществляется заданием инструкции каждому из них в соответствующей части командного слова. Т.е. любое командное слово состоит из трех частей, в каждой из которых может быть записана одна инструкция. В первых двух частях содержатся инструкции первому и второму блокам основных ИУ, в третьей — инструкция ИУ обмена. Возможно отсутствие инструкций отдельным блокам ИУ, что эквивалентно простоям ИУ в их составе.
Для выполнения каждой основной инструкции назначается ИУ определенного типа из числа свободных. При отсутствии свободных ИУ для выполнения хотя бы одной инструкции командного слова выполнение этого командного слова (а следовательно, и программы) задерживается.
Предположим, что инструкции, назначенные для выполнения одновременно (в один
машинный такт), выполняются назначенными для этого ИУ синхронно за одинаковое и
равное для всех операций число машинных тактов t0 = 2.
Обмен выполняется за время t1 = 1.
Предположим, что в ВС для уплотнения записи программы используются элементы
t0-1 командных слов;Блокировка выполнения инструкции осуществляется в соответствии с адресным способом распараллеливания в том случае, если в ней в качестве операнда фигурирует адрес, являющийся в еще не выполненной инструкции более старшего приоритета адресом результата. Если выполнение второй основной инструкции задерживается, то вместе с ней задерживается выполнение и инструкции обмена. Таким образом, будем считать, что пропуск необходимого числа тактов производится автоматически.
Пусть необходимо написать оптимальную программу счета величин
$$f = b{}^2 /x{}^2 + a/b{}^2$$
$$g = af - t{}^3 (d - c)$$ (7.1)
Программа до оптимизации, написанная "в линеечку", представлена на рис. 7.1.
(рис 7.1) Исходная последовательная программа
В позициях R1 и R2 указываются первый и
второй адреса операндов. Это адреса
СОЗУ. R3 — адрес результата в СОЗУ, A — адрес
считывания или записи в ОП. Использован набор инструкций, содержание которых ясно из их записи.
На рис. 7.2 представлен G, отражающий
взаимосвязь инструкций. Другим цветом отмечены работы по обмену.
(рис 7.2) Граф-схема алгоритма
В графе G можно найти длину Tкр
критического пути. Опыт подсказывает: практические
возможности распараллеливания линейного участка программы таковы, что
правомерно считать достаточным количество ИУ для выполнения оптимизированной программы за
время Tкр. Значит, мы заранее можем для данного
линейного участка считать
заданным ограничение времени его выполнения T = Tкр.
При необходимости легко
предусмотреть в алгоритме динамическую коррекцию этого значения. Это позволяет
использовать значения поздних сроков окончания выполнения работ и
сформулировать более эффективное при данном применении
На рис. 7.3 представлена диаграмма выполнения работ (инструкций),
иллюстрирующая нахождение поздних сроков окончания их выполнения при T = Tкр = 12.
(рис 7.3) Диаграмма выполнения работ
На рис. 7.4 представлена S*,
где для j -й
инструкции, j = 1, ..., 19, указано время tj ее
выполнения, поздний срок
окончания выполнения $$\tau _{2j}(12)$$, а также значение $$\theta _{j}$$ — суммарное время выполнения
всех инструкций, которым данная инструкция предшествует. Эти значения
отыскиваются в результате введения S, что также показано на рисунке.
(рис 7.4) Расширенная матрица следования
Имитируя изменение текущего времени t и определяя состояние
вычислительного процесса (на рис. 7.5 отражено изменение матрицы S в процессе
компоновки программы), начнем формирование оптимизированной программы с первого командного
слова.
(рис 7.5) Матрица следования после первого шага компоновки команд
t = 0, R = {1, 2, 3, 10, 11, 12}, $$\{ \tau _{2j\in R}(12)\} = \{ 3, 1, 1, 3, 5, 5\}$$, $$\{ \theta _{j\in R}\} = \{ 11, 15, 13, 10, 8, 8\}$$. После переупорядочения
(по неубыванию значений $$\tau _{2j}(12)$$, а для равных указанных
значений — по невозрастанию значений $$\{ \theta _{j\in R}\} = \{ 2, 3, 1, 10, 11, 12\}$$.
В первое командное слово записываем инструкцию 2. Ее номер заносим в множество $$\alpha$$
— множество назначенных, но не выполненных инструкций; каждая инструкция в нем снабжена счетчиком
времени выполнения, который уменьшается при моделировании изменения времени. Равенство
счетчика нулю свидетельствует о выполнении инструкции. Т.к. в командное слово
записана инструкция обмена, и в R отсутствует информация об
основных инструкциях, которые можно записать в это же слово, то после перебора всех элементов R полагаем t = 1 и переходим к заполнению
следующего командного слова.
Исключаем из матрицы S строку и столбец, соответствующие инструкции 2, т.к.
к новому моменту времени она будет выполнена.
t = 1, R = {1, 3, 4, 10, 11, 12}. После упорядочения по $$\tau _{2j\in R}$$
и $$\theta _{j\in R}$$ R = {3, 4, 1, 10, 11, 12}.
Запишем во второе командное слово инструкцию 3. После
исключения ее номера из R вновь найдем инструкцию 4, готовую к
выполнению. Ее записываем в это же командное слово. Так как инструкция обмена в командное
слово уже записана, а основных в R больше нет, перейдем к заполнению
третьего командного слова. Положим t = 2 и исключаем из матрицы S строку
и столбец, соответствующие выполненной к этому моменту времени инструкции 3 (рис. 7.5).
Назначенные для выполнения, но не выполненные к данному моменту времени инструкции (отмеченные
в $$\alpha$$ будем отмечать знаком *.
t = 2, R = {1, 5, 10, 11, 12}. После упорядочения по $$\tau _{2j\in R}$$
и $$\theta _{j \in R}$$ R = {5, 1, 10, 11, 12}. Запишем
в третье командное слово инструкции 5 и 1. Положим t = 3, преобразуем S, исключив
из нее строки и столбцы, соответствующие назначенным инструкциям.
t = 3, после упорядочения R = {5, 10, 11,
12}. Запишем в четвертое командное слово последовательно инструкции 10, 13. Положим t =
4, исключим из S строки и столбцы, соответствующие выполненным к данному моменту
времени инструкциям 5 и 10 (рис. 7.6).
(рис 7.6) Матрица следования после второго шага компоновки команд
$$t = 4, R = \{ 6, 7, 11, 12\} ,\{ \tau _{2j\in R}(12)\} = \{ 5, 5, 5,5\} , \{ \theta _{j\in R\} }\} = \{ 10, 10, 8, 8\}$$. После упорядочения R =
{6, 7, 11, 12}. Запишем в пятое командное
слово инструкции 6, 7, 11. Полагаем t = 5, исключаем из S строки и столбцы,
соответствующие выполненным к этому моменту времени инструкциям 13 и 11.
t = 5, R = {12, 14}. Инструкции 12 и 14 запишем в шестое
командное слово. Положим t = 6, исключаем из матрицы S строки и
столбцы, соответствующие выполненным к этому моменту времени инструкциям 6, 7 и 12 (рис. 7.7).
(рис 7.7) Матрица следования после третьего шага компоновки команд
t = 6, R = {8, 15}. Инструкции 8 и 15 записываем в
седьмое командное слово. Т.к. инструкция обмена в ней не записана и существуют инструкции, находящиеся в
процессе выполнения, продолжим компоновать седьмое командное слово, положив t = 7. Исключим из S строку и столбец, соответствующие инструкции 14 (рис. 7.8).
(рис 7.8) Матрица следования после четвёртого шага компоновки команд
$$t = 7, R = \varnothing$$. Продолжим (в соответствии с
приоритетом при выполнении!) попытку заполнения седьмого командного слова. Положим t = 8,
исключим из S строки и столбцы, соответствующие инструкциям 8 и 15 (рис. 7.9).
(рис 7.9) Матрица следования после пятого шага компоновки команд
t = 8, R = {9, 16, 17}. В седьмое командное слово
записываем инструкцию обмена 9. Положим t = 9, исключим из матрицы S
строку и столбец, соответствующие инструкции 9.
t = 9, R = {16, 17}. В восьмое командное слово запишем
инструкции 16 и 17. Так как инструкция обмена не записана и $$\alpha \ne \varnothing$$, продолжим попытку заполнения
восьмого командного слова. Положим t = 10. К этому моменту
времени не заканчивается выполнение ранее назначенных инструкций,
(рис 7.10) Матрица следования после шестого шага компоновки команд
Положим t = 11. К этому моменту времени выполняются
инструкции 16 и 17. Исключим из матрицы S строки и столбцы, соответствующие этим инструкциям (рис. 7.11).
(рис 7.11) Матрица следования после седьмого шага компоновки команд
t = 11, R = {18}. Запишем инструкцию 18 в девятое
командное слово. Полагаем t = 12. К этому моменту нет инструкций, выполнение
которых закончено, а $$R = \varnothing$$. Полагаем t = 13, продолжаем
попытку заполнения девятого командного слова. К этому моменту заканчивается выполнение инструкции 18. Исключим строку и
столбец, соответствующие этой инструкции, из матрицы S.
t = 13, R = {19}. Инструкцию обмена 19 запишем в девятое
командное слово. t = 14 заканчивается и ее выполнение.
(рис 7.12) Программа в окончательном виде
Перебор возможных вариантов убеждает в том, что полученное время выполнения скомпонованной программы минимально. На рис. 7.13 представлена диаграмма выполнения программы.
(рис 7.13) Временная диаграмма выполнения программы
Однако длина программы может быть уменьшена на одно командное слово хотя бы за счет записи инструкции 8 в шестое командное слово со смещением всех последующих инструкций.
Попробуем выработать рекомендации по совместному программированию обработки вариантов счета, обработки элементов массива и др., что позволяет увеличить эффективность использования многофункциональных АЛУ.
Методы вычислений отличаются регулярностью действий. На их основе можно строить эффективные схемы вычислений с использованием многофункциональных АЛУ, в том числе — в архитектурах, сводящихся к "длинным" командным словам.
Рассмотрим пример распараллеливания типичного фрагмента обработки нейросети в режиме распознавания. Он демонстрирует способ оптимальной реализации на процессоре, где АЛУ содержит несколько исполнительных устройств (ИУ) различной специализации, функций нейрокомпьютера. Максимальная загрузка всех устройств возможна тогда, когда в каждом линейном участке программы предусмотрена обработка не одного, а нескольких нейронов сети. Покажем это на фрагменте алгоритма имитации работы нейронов в режиме распознавания, т.е. в режиме, требующем максимальной производительности нейрокомпьютера.
В режиме распознавания в простейшей модели нейрона решается задача
суммирования взвешенных, в соответствии с регулируемыми на этапе обучения весами {wi},i = 1, ..., n,
{xi} и сравнение
полученной суммы с порогом h. Если сумма превышает порог, происходит
возбуждение нейрона с величиной y:$$y =
\left\{
\begin{array}{ll}
\Delta = \sum\limits_{i=1}^n w_i x_i - h, \t{ при } \Delta > 0, \\
0, \t{ при } \Delta \leqslant 0. \\
\end{array}
\right.$$
Для n = 3 запишем в трехадресных командах программу
одновременной обработки двух
нейронов. Это двукратное повторение одной и той же последовательности команд,
отличающейся используемыми адресами (табл. 7.1).
| № | КОП | A1 | A2 | A3 |
|---|---|---|---|---|
| 1 | x | <w11> | <x11> | r1 |
| 2 | x | <w12> | <x12> | r2 |
| 3 | x | <w13> | <x13> | r3 |
| 4 | + | r1 | r2 | r4 |
| 5 | + | r3 | r4 | r5 |
| 6 | - | r5 | <h1> | r6 |
| 7 | > | r6 | r7 | |
| 8 | if... | r7 | r6 | <y1> |
| 0 | ||||
| 9 | x | <w21> | <x21> | r8 |
| 10 | x | <w22> | <x22> | r9 |
| 11 | x | <w23> | <x23> | r10 |
| 12 | + | r8 | r9 | r11 |
| 13 | + | r10 | r11 | r12 |
| 14 | - | r12 | <h2> | r13 |
| 15 | > | r13 | r14 | |
| 16 | if... | r14 | r13 | <y2> |
| 0 |
Очевидно, программа совместной обработки трех нейронов будет содержать трехкратное повторение такого же участка и т.д.
Выше было показано, что при решении задач параллельного программирования
для полного задания информации о частичной упорядоченности работ целесообразно
использовать квадратные (размер m равен числу трехадресных команд
линейного участка) нуль-единичные S, дополненные
столбцами весов — времен выполнения работ.
Такая матрица для нашего примера представлена в таблице 7.2, где кроме весов
указаны также поздние сроки $$\tau$$ начала выполнения команд (для
суммы всех времен выполнения работ Т = 56 ) и объемы $$\theta$$ последующих работ. Эти
значения найдены по
приведенным выше алгоритмам. Если при совместном анализе двух команд
( i -й и j -й, i>j ) первый или второй адрес "нижней" команды
совпадает с третьим адресом
"верхней" команды, то элемент матрицы S на
пересечении i -й строки и j -го столбца
полагается равным единице $$\alpha _{ij} = 1$$, в противном случае
он равен нулю.
Этот алгоритм формирования
В приведенной матрице отражены и
| T | $$\tau$$ | $$\theta$$ | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 5 | 38 | 18 | ||||||||||||||||
| 2 | 5 | 38 | 18 | ||||||||||||||||
| 3 | 5 | 41 | 15 | ||||||||||||||||
| 4 | 1 | 1 | 3 | 43 | 13 | ||||||||||||||
| 5 | 1 | 1 | 1 | 1 | 3 | 46 | 10 | ||||||||||||
| 6 | 1 | 1 | 1 | 1 | 1 | 3 | 49 | 7 | |||||||||||
| 7 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 52 | 4 | ||||||||||
| 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 54 | 2 | |||||||||
| 9 | 5 | 38 | 18 | ||||||||||||||||
| 10 | 5 | 38 | 18 | ||||||||||||||||
| 11 | 5 | 41 | 15 | ||||||||||||||||
| 12 | 1 | 1 | 3 | 43 | 13 | ||||||||||||||
| 13 | 1 | 1 | 1 | 1 | 3 | 46 | 10 | ||||||||||||
| 14 | 1 | 1 | 1 | 1 | 1 | 3 | 49 | 7 | |||||||||||
| 15 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 52 | 4 | ||||||||||
| 16 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 54 | 2 |
Выберем структуру АЛУ, содержащую два ИУ сложения, два — умножения, два — логических. Остальные ИУ нам в примере не понадобятся. В командных словах также предположим обязательное присутствие позиций, соответствующих этим ИУ.
В таблице 7.3 отражена временная диаграмма условного назначения
(формирования "длинного" командного слова) и имитации выполнения трехадресных
команд. Алгоритм формирования, выполнение которого сопровождается исключением из матрицы S строк и столбцов, соответствующих "выполненным" командам, изложен выше.
| Такты | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем строку и столбец из матрицы S | |||||||||||||
| 2 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 3 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 5 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 6 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 7 | 2 | 1 | 0 | Исключаем ... | ||||||||||||||||
| 8 | 2 | 1 | 0 | И | ||||||||||||||||
| 9 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 10 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 11 | 5 | 4 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||
| 12 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 13 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 14 | 3 | 2 | 1 | 0 | Исключаем ... | |||||||||||||||
| 15 | 2 | 1 | 0 | Искл. | ||||||||||||||||
| 16 | 2 | 1 | 0 | |||||||||||||||||
"Назначенные" работы (трехадресные команды) и такты, в которые
они назначены, соответствуют "длинным" командам. Как видно из таблицы —
диаграммы, программа изобилует пропусками тактов,
Предположим наличие
| № | + | + | x | x | ЛОГ | ЛОГ |
|---|---|---|---|---|---|---|
| 1 | 1 | 2 | ||||
| 2 | 9 | 10 | ||||
| 3 | 3 | 11 | ||||
| 4 | 4 | 12 | ||||
| 5 | 5 | 13 | ||||
| 6 | 7 | 15 | ||||
| 7 | 8 | 16 |
Несмотря на то, что мы не можем считать рассмотренный в основной части пример характерным, он наводит на мысль о необходимости полного статистического анализа целесообразности оптимизации компоновки "длинных" командных слов. Сложность такой компоновки, возможно, компенсируется простотой получения программы в результате "быстрой" компоновки, если учитывать совокупную стоимость разработки и выполнения программ. Очевидно, что эта проблема требует изучения на основе моделирования.
Архитектура ВС с управляемой в каждом такте работой исполнительных устройств выявляет определенные правила по организации вычислений. На примере показана целесообразность совместной обработки нескольких элементов массива — в обобщенном понятии. Такая обработка обеспечивает максимальную загрузку оборудования, т.е. максимальное значение коэффициента загрузки исполнительных устройств АЛУ.
Выше мы указывали, что все сделанное теперь требует перекомпоновки, сжатия каждого слова для получения командных слов переменной длины. Каждое слово (впереди указывается его длина) должно нести смысловую нагрузку: "что и какое именно устройство должно в данном очередном такте начать выполнять".
Рассмотрим еще один, более конкретный пример компоновки "длинного" командного слова для ВС, разрабатываемой в 1970-е годы. Проект, основанный на архитектуре "в остаточных классах", не получил должного освещения в годы "холодной войны", тем более, что авторы сами перестали настаивать на его воплощении. Но это был, по-видимому, первый в мире опыт реализации принципа "длинного" командного слова.
Пусть АЛУ процессора ВС состоит из трех многофункциональных блоков ИУ, работающих синхронно. Два блока — универсальные, они содержат специализированные по операциям ИУ (будем называть их основными ИУ) и с их помощью выполняют основной набор операций. Третий блок ИУ обеспечивает обмен СОЗУ (с регистрами которого и только которого работают основные ИУ) с памятью других уровней. Синхронизация работы блоков ИУ осуществляется заданием инструкции каждому из них в соответствующей части командного слова. Т.е. любое командное слово состоит из трех частей, в каждой из которых может быть записана одна инструкция. В первых двух частях содержатся инструкции первому и второму блокам основных ИУ, в третьей — инструкция ИУ обмена. Возможно отсутствие инструкций отдельным блокам ИУ, что эквивалентно простоям ИУ в их составе.
Для выполнения каждой основной инструкции назначается ИУ определенного типа из числа свободных. При отсутствии свободных ИУ для выполнения хотя бы одной инструкции командного слова выполнение этого командного слова (а следовательно, и программы) задерживается.
Предположим, что инструкции, назначенные для выполнения одновременно (в один
машинный такт), выполняются назначенными для этого ИУ синхронно за одинаковое и
равное для всех операций число машинных тактов t0 = 2.
Обмен выполняется за время t1 = 1.
Предположим, что в ВС для уплотнения записи программы используются элементы
t0-1 командных слов;Блокировка выполнения инструкции осуществляется в соответствии с адресным способом распараллеливания в том случае, если в ней в качестве операнда фигурирует адрес, являющийся в еще не выполненной инструкции более старшего приоритета адресом результата. Если выполнение второй основной инструкции задерживается, то вместе с ней задерживается выполнение и инструкции обмена. Таким образом, будем считать, что пропуск необходимого числа тактов производится автоматически.
Пусть необходимо написать оптимальную программу счета величин
$$f = b{}^2 /x{}^2 + a/b{}^2$$
$$g = af - t{}^3 (d - c)$$ (7.1)
Программа до оптимизации, написанная "в линеечку", представлена на рис. 7.1.
(рис 7.1) Исходная последовательная программа
В позициях R1 и R2 указываются первый и
второй адреса операндов. Это адреса
СОЗУ. R3 — адрес результата в СОЗУ, A — адрес
считывания или записи в ОП. Использован набор инструкций, содержание которых ясно из их записи.
На рис. 7.2 представлен G, отражающий
взаимосвязь инструкций. Другим цветом отмечены работы по обмену.
(рис 7.2) Граф-схема алгоритма
В графе G можно найти длину Tкр
критического пути. Опыт подсказывает: практические
возможности распараллеливания линейного участка программы таковы, что
правомерно считать достаточным количество ИУ для выполнения оптимизированной программы за
время Tкр. Значит, мы заранее можем для данного
линейного участка считать
заданным ограничение времени его выполнения T = Tкр.
При необходимости легко
предусмотреть в алгоритме динамическую коррекцию этого значения. Это позволяет
использовать значения поздних сроков окончания выполнения работ и
сформулировать более эффективное при данном применении
На рис. 7.3 представлена диаграмма выполнения работ (инструкций),
иллюстрирующая нахождение поздних сроков окончания их выполнения при T = Tкр = 12.
(рис 7.3) Диаграмма выполнения работ
На рис. 7.4 представлена S*,
где для j -й
инструкции, j = 1, ..., 19, указано время tj ее
выполнения, поздний срок
окончания выполнения $$\tau _{2j}(12)$$, а также значение $$\theta _{j}$$ — суммарное время выполнения
всех инструкций, которым данная инструкция предшествует. Эти значения
отыскиваются в результате введения S, что также показано на рисунке.
(рис 7.4) Расширенная матрица следования
Имитируя изменение текущего времени t и определяя состояние
вычислительного процесса (на рис. 7.5 отражено изменение матрицы S в процессе
компоновки программы), начнем формирование оптимизированной программы с первого командного
слова.
(рис 7.5) Матрица следования после первого шага компоновки команд
t = 0, R = {1, 2, 3, 10, 11, 12}, $$\{ \tau _{2j\in R}(12)\} = \{ 3, 1, 1, 3, 5, 5\}$$, $$\{ \theta _{j\in R}\} = \{ 11, 15, 13, 10, 8, 8\}$$. После переупорядочения
(по неубыванию значений $$\tau _{2j}(12)$$, а для равных указанных
значений — по невозрастанию значений $$\{ \theta _{j\in R}\} = \{ 2, 3, 1, 10, 11, 12\}$$.
В первое командное слово записываем инструкцию 2. Ее номер заносим в множество $$\alpha$$
— множество назначенных, но не выполненных инструкций; каждая инструкция в нем снабжена счетчиком
времени выполнения, который уменьшается при моделировании изменения времени. Равенство
счетчика нулю свидетельствует о выполнении инструкции. Т.к. в командное слово
записана инструкция обмена, и в R отсутствует информация об
основных инструкциях, которые можно записать в это же слово, то после перебора всех элементов R полагаем t = 1 и переходим к заполнению
следующего командного слова.
Исключаем из матрицы S строку и столбец, соответствующие инструкции 2, т.к.
к новому моменту времени она будет выполнена.
t = 1, R = {1, 3, 4, 10, 11, 12}. После упорядочения по $$\tau _{2j\in R}$$
и $$\theta _{j\in R}$$ R = {3, 4, 1, 10, 11, 12}.
Запишем во второе командное слово инструкцию 3. После
исключения ее номера из R вновь найдем инструкцию 4, готовую к
выполнению. Ее записываем в это же командное слово. Так как инструкция обмена в командное
слово уже записана, а основных в R больше нет, перейдем к заполнению
третьего командного слова. Положим t = 2 и исключаем из матрицы S строку
и столбец, соответствующие выполненной к этому моменту времени инструкции 3 (рис. 7.5).
Назначенные для выполнения, но не выполненные к данному моменту времени инструкции (отмеченные
в $$\alpha$$ будем отмечать знаком *.
t = 2, R = {1, 5, 10, 11, 12}. После упорядочения по $$\tau _{2j\in R}$$
и $$\theta _{j \in R}$$ R = {5, 1, 10, 11, 12}. Запишем
в третье командное слово инструкции 5 и 1. Положим t = 3, преобразуем S, исключив
из нее строки и столбцы, соответствующие назначенным инструкциям.
t = 3, после упорядочения R = {5, 10, 11,
12}. Запишем в четвертое командное слово последовательно инструкции 10, 13. Положим t =
4, исключим из S строки и столбцы, соответствующие выполненным к данному моменту
времени инструкциям 5 и 10 (рис. 7.6).
(рис 7.6) Матрица следования после второго шага компоновки команд
$$t = 4, R = \{ 6, 7, 11, 12\} ,\{ \tau _{2j\in R}(12)\} = \{ 5, 5, 5,5\} , \{ \theta _{j\in R\} }\} = \{ 10, 10, 8, 8\}$$. После упорядочения R =
{6, 7, 11, 12}. Запишем в пятое командное
слово инструкции 6, 7, 11. Полагаем t = 5, исключаем из S строки и столбцы,
соответствующие выполненным к этому моменту времени инструкциям 13 и 11.
t = 5, R = {12, 14}. Инструкции 12 и 14 запишем в шестое
командное слово. Положим t = 6, исключаем из матрицы S строки и
столбцы, соответствующие выполненным к этому моменту времени инструкциям 6, 7 и 12 (рис. 7.7).
(рис 7.7) Матрица следования после третьего шага компоновки команд
t = 6, R = {8, 15}. Инструкции 8 и 15 записываем в
седьмое командное слово. Т.к. инструкция обмена в ней не записана и существуют инструкции, находящиеся в
процессе выполнения, продолжим компоновать седьмое командное слово, положив t = 7. Исключим из S строку и столбец, соответствующие инструкции 14 (рис. 7.8).
(рис 7.8) Матрица следования после четвёртого шага компоновки команд
$$t = 7, R = \varnothing$$. Продолжим (в соответствии с
приоритетом при выполнении!) попытку заполнения седьмого командного слова. Положим t = 8,
исключим из S строки и столбцы, соответствующие инструкциям 8 и 15 (рис. 7.9).
(рис 7.9) Матрица следования после пятого шага компоновки команд
t = 8, R = {9, 16, 17}. В седьмое командное слово
записываем инструкцию обмена 9. Положим t = 9, исключим из матрицы S
строку и столбец, соответствующие инструкции 9.
t = 9, R = {16, 17}. В восьмое командное слово запишем
инструкции 16 и 17. Так как инструкция обмена не записана и $$\alpha \ne \varnothing$$, продолжим попытку заполнения
восьмого командного слова. Положим t = 10. К этому моменту
времени не заканчивается выполнение ранее назначенных инструкций,
(рис 7.10) Матрица следования после шестого шага компоновки команд
Положим t = 11. К этому моменту времени выполняются
инструкции 16 и 17. Исключим из матрицы S строки и столбцы, соответствующие этим инструкциям (рис. 7.11).
(рис 7.11) Матрица следования после седьмого шага компоновки команд
t = 11, R = {18}. Запишем инструкцию 18 в девятое
командное слово. Полагаем t = 12. К этому моменту нет инструкций, выполнение
которых закончено, а $$R = \varnothing$$. Полагаем t = 13, продолжаем
попытку заполнения девятого командного слова. К этому моменту заканчивается выполнение инструкции 18. Исключим строку и
столбец, соответствующие этой инструкции, из матрицы S.
t = 13, R = {19}. Инструкцию обмена 19 запишем в девятое
командное слово. t = 14 заканчивается и ее выполнение.
(рис 7.12) Программа в окончательном виде
Перебор возможных вариантов убеждает в том, что полученное время выполнения скомпонованной программы минимально. На рис. 7.13 представлена диаграмма выполнения программы.
(рис 7.13) Временная диаграмма выполнения программы
Однако длина программы может быть уменьшена на одно командное слово хотя бы за счет записи инструкции 8 в шестое командное слово со смещением всех последующих инструкций.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.