Россия, Москва |
Лекция 7: Оптимальное программирование в архитектуре управления каждым тактом
Имитируя изменение текущего времени t и определяя состояние вычислительного процесса (на рис. 7.5 отражено изменение матрицы S в процессе компоновки программы), начнем формирование оптимизированной программы с первого командного слова.
-
t = 0, R = {1, 2, 3, 10, 11, 12}, , . После переупорядочения (по неубыванию значений , а для равных указанных значений — по невозрастанию значений . В первое командное слово записываем инструкцию 2. Ее номер заносим в множество — множество назначенных, но не выполненных инструкций; каждая инструкция в нем снабжена счетчиком времени выполнения, который уменьшается при моделировании изменения времени. Равенство счетчика нулю свидетельствует о выполнении инструкции. Т.к. в командное слово записана инструкция обмена, и в R отсутствует информация об основных инструкциях, которые можно записать в это же слово, то после перебора всех элементов R полагаем t = 1 и переходим к заполнению следующего командного слова. Исключаем из матрицы S строку и столбец, соответствующие инструкции 2, т.к. к новому моменту времени она будет выполнена.
-
t = 1, R = {1, 3, 4, 10, 11, 12}. После упорядочения по и R = {3, 4, 1, 10, 11, 12}. Запишем во второе командное слово инструкцию 3. После исключения ее номера из R вновь найдем инструкцию 4, готовую к выполнению. Ее записываем в это же командное слово. Так как инструкция обмена в командное слово уже записана, а основных в R больше нет, перейдем к заполнению третьего командного слова. Положим t = 2 и исключаем из матрицы S строку и столбец, соответствующие выполненной к этому моменту времени инструкции 3 (рис. 7.5). Назначенные для выполнения, но не выполненные к данному моменту времени инструкции (отмеченные в будем отмечать знаком *.
-
t = 2, R = {1, 5, 10, 11, 12}. После упорядочения по и 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).
-
. После упорядочения 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).
-
t = 6, R = {8, 15}. Инструкции 8 и 15 записываем в седьмое командное слово. Т.к. инструкция обмена в ней не записана и существуют инструкции, находящиеся в процессе выполнения, продолжим компоновать седьмое командное слово, положив t = 7. Исключим из S строку и столбец, соответствующие инструкции 14 (рис. 7.8).
-
. Продолжим (в соответствии с приоритетом при выполнении!) попытку заполнения седьмого командного слова. Положим t = 8, исключим из S строки и столбцы, соответствующие инструкциям 8 и 15 (рис. 7.9).
-
t = 8, R = {9, 16, 17}. В седьмое командное слово записываем инструкцию обмена 9. Положим t = 9, исключим из матрицы S строку и столбец, соответствующие инструкции 9.
-
t = 9, R = {16, 17}. В восьмое командное слово запишем инструкции 16 и 17. Так как инструкция обмена не записана и , продолжим попытку заполнения восьмого командного слова. Положим t = 10. К этому моменту времени не заканчивается выполнение ранее назначенных инструкций, матрица следования сохраняет прежний вид (рис. 7.10).
Положим t = 11. К этому моменту времени выполняются инструкции 16 и 17. Исключим из матрицы S строки и столбцы, соответствующие этим инструкциям (рис. 7.11).
-
t = 11, R = {18}. Запишем инструкцию 18 в девятое командное слово. Полагаем t = 12. К этому моменту нет инструкций, выполнение которых закончено, а . Полагаем t = 13, продолжаем попытку заполнения девятого командного слова. К этому моменту заканчивается выполнение инструкции 18. Исключим строку и столбец, соответствующие этой инструкции, из матрицы S.
-
t = 13, R = {19}. Инструкцию обмена 19 запишем в девятое командное слово. Матрица следования исчерпана, составление программы (рис. 7.12) заканчивается, через один такт t = 14 заканчивается и ее выполнение.
Перебор возможных вариантов убеждает в том, что полученное время выполнения скомпонованной программы минимально. На рис. 7.13 представлена диаграмма выполнения программы.
Однако длина программы может быть уменьшена на одно командное слово хотя бы за счет записи инструкции 8 в шестое командное слово со смещением всех последующих инструкций.