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

Аппаратная поддержка языка пользователя — основная концепция мультипроцессорных систем

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Обработка массивов

Переменные с индексами, т.е. элементы одно- и многомерных массивов, представляют большие трудности при трансляции и выполнении, если не обеспечены средствами аппаратной поддержки на уровне ЯВУ.

Так как основная работа внутри процедуры производится с регистрами СОЗУ, то обращение к переменным с индексами сводится к двум операциям: считыванию и записи.

Пусть объявлен трехмерный массив A[0 : P - 1 ; 0 : Q - 1 ; 0 : R - 1]. В тексте программы встретилось обращение к элементу этого массива A[i ,j , k]. Надо установить адрес этого элемента. Какой подход может лежать в основе аппаратной поддержки установления адреса элемента массива по значениям индексов?

Важно учесть, что память линейна, одномерна (пронумерована своими адресами). При заданных транслятору значениях P, Q, R трехмерный массив A сводится в ней к одномерному массиву длиной P x Q x R, расположенному начиная с некоторого адреса a, как показано на рис. 5.4.

Преобразование трёхмерного массива в линейный

Рис. 5.4. Преобразование трёхмерного массива в линейный

При этом шаги переадресации по индексам составляют hi = 1, hj = P, hk = P x Q. При заданных i, j, k

< A[i , j , k]> = a + i + P x j + P x Q x k.

Значит, существует принципиальная возможность рассчитать адрес переменной с индексами, заданной в символах ЯВУ, в том числе аппаратно. Однако необходимость выполнения операций сложения и умножения приводит к целесообразности аппаратно-программного метода. Он используется в МВК "Эльбрус".

В общем случае для нахождения адреса индексованной переменной запускается процедура ОС. Средства же аппаратной поддержки используются полностью для оптимизации обработки массивов в цикле. При этом количество измерений массива ограничено тремя.

Итак, массив занимает сплошную неразрывную область памяти. Начало и размер области (в данном случае a, PQR ), а также формат элементов массива и статус обращения (защита по записи или считыванию) описывает дескриптор массива. Изменение каждого индекса означает "прохождение" по памяти с постоянным шагом. Величины шага по памяти (например, как выше h, hj, hk ) в каждом измерении упакованы в специальном слове — паспорте массива.

Дескриптор и паспорт массива, а также индексы по измерениям являются достаточной информацией для обращения к элементу массива.

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

В составе ИУ АЛУ ЦП "Эльбрус-2" есть устройство индексации. (Аналогичные устройства есть в составе многих ВС.) В нем содержится ассоциативная память АП, в которой для данного массива запоминается адрес очередного элемента и шаги переадресации. При первом выполнении цикла, т.е. при первом обращении к массиву, по дескриптору, паспорту и начальным значениям индексов вычисляются адрес требуемого элемента и шаг переадресации по параметру цикла. Они заносятся в АП. При следующих обращениях к массиву в этом же цикле из АП извлекается адрес элемента, складывается с шагом переадресации и одновременно с использованием как адреса нового элемента, заносится в АП вместо адреса старого элемента. АП рассчитана на хранение информации о шести массивах. Время вычисления адресов элементов в цикле для шести массивов — 1 такт.

Предусмотрен механизм автоматической предварительной "подкачки" элементов массива из ОП в ассоциативное ЗУ массивов. При этом темп подкачки данных, как правило, превышает темп использования.

Выполнение циклов

Обычно аппаратно поддерживают такие "предсказуемые" операторы цикла, как оператор цикла с параметром в Паскале:

for i := E1 to E2 do, если E1 < E2, i = E1, E1 + 1, ..., E2; 
for i := E1 downto E2 do, если  E1 > E2, i = E1, E1 - 1 dots E2.

(ПАСКАЛЬ — алголоподобный язык; в Алголе этому циклу соответствует цикл типа арифметической прогрессии. Циклу типа пересчет соответствует заголовок вида for i := E while B do, где Eарифметическое выражение, B — условный оператор. Аналог существует в Паскале. Такой цикл реализуется с помощью условного перехода.)

Аппаратно реализуется элемент цикла в трех регистрах СОЗУ {СЦ, ГЗЦ, Анц}, где СЦ — Счетчик Цикла (фиксирует значение параметра цикла), ГЗЦ — Граничное Значение E2 параметра Цикла, Aнц Адрес начала цикла. Используется команда типа КЦ — Конец Цикла, по которой (СЦ) сравнивается с (ГЗЦ) ; в случае равенства (СЦ):= 0 и производится выход из цикла (на следующую команду). В случае неравенства — (СЦ):= (СЦ) + 1 и безусловный переход по Aнц. Вход в цикл производится по команде ЦИКЛ с параметрами, задающими (СЦ) = E1 и (ГЗЦ) = E2. По этой же команде фиксируется адрес Анц — следующей команды (или метки начала цикла). Однако, если до этого (СЦ) \ne  0, то производится вход во вложенный цикл. Тогда элемент цикла прерываемого заносится в стек элементов циклов. При выходе из цикла производится, если необходимо, восстановление внешнего цикла.

Так реализуется система вложенных циклов.

Ускорение условных переходов

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

УП1 <a> <b> C

используются, когда можно предсказать, что с большой вероятностью a < b ; если ожидается, что скорее a >= b, то используется другая модификация

УП2 <a> <b> C}.

В этих случаях загрузка конвейера производится в направлении более вероятного ветвления. В случае противоположного направления ветвления останавливается конвейер, отменяются соответствующие действия и запускается конвейер по другому направлению. Очевидно, что в цикле предпочтителен переход на начало.

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

В проекте ЦП МВК "Эльбрус-3" пошли дальше. Условный переход организуется двумя командами: подготовки перехода и собственно перехода. Команда подготовки перехода ставится на несколько тактов раньше ветвления. По ней находится в ассоциативном БК адрес перехода. Если такого в БК нет, то организуется подкачка в него участка программы с этого адреса. Команды с адреса перехода поступают на дополнительный буфер дешифрации команд, т.е. на дополнительный конвейер. Так начинают выполняться обе ветви в режиме условного выполнения. При выполнении условия по самой команде перехода без задержки продолжается выполнение нужной ветви.

Память предикатов применяется для минимизации числа условных переходов при выполнении условных арифметических выражений. Она позволяет хранить значения булевых переменных, полученных при проверке условий. Планирование альтернативных действий может выполняться в спекулятивном режиме. Это означает, что в команде может указываться имя булевой переменной. Операция может быть выполнена, если значение этой переменной равно 1. В противном случае ее выполнение либо пропускается, либо — в зависимости от принятых условий — в режиме "жужжания" ожидается (например, при считывании) присваивание этой переменной значения 1.

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Вадим Козлов
Вадим Козлов
Россия, Москва
Тимофей Маханько
Тимофей Маханько
Россия