Рис. 3.1.2 Схема заполнения конвейера
Максимальное быстродействие процессора при полной загрузке конвейера составляет
Число n — количество уровней конвейера, или глубина перекрытия, т.к. каждый такт на конвейере параллельно выполняются n операций. Чем больше число уровней (станций), тем больший выигрыш в быстродействии может быть получен.
В проекте МВК "Эльбрус-3" АЛУ его ЦП имеет конвейерные ИУ сложения (n=5), умножения (n=5), деления (n=8 для полусловного формата, — 32 разряда, n=16 для словного формата). Логические операции также выполняются на конвейере с n=2.
Известна оценка
т.е. выигрыш в быстродействии получается в
раз.Реальный выигрыш в быстродействии оказывается всегда меньше, чем указанный выше, поскольку:
1. некоторые операции, например, над целыми, могут выполняться за меньшее количество этапов, чем другие арифметические операции. Тогда отдельные станции конвейера будут простаивать.
2. при выполнении некоторых операций на определённых этапах могут требоваться результаты более поздних, ещё не выполненных этапов предыдущих операций. Приходится приостанавливать конвейер.
3. поток команд порождает недостаточное количество операций для полной загрузки конвейера.
Наряду с использованием конвейеров для обработки единичных (скалярных) данных, используют так называемые векторные конвейеры, единичной информацией для которых являются вектора — массивы данных. Применение векторных конвейеров определило класс ВС — векторно-конвейерных ВС, сегодня ещё являющихся основой построения некоторых супер-ЭВМ — ВС сверхвысокой производительности.
Для эффективности векторно-конвейерных ВС (например, для подготовки алгоритмов решения задач на ВС "Электроника-ССБИС") необходима векторизация задач. Это — такое преобразование алгоритма, при котором максимально выделяются (если не вся задача сводится к этому) элементы обработки массивов данных одинаковыми операциями. Сюда входят все задачи, основанные на матричных преобразованиях, обработка изображений, сигналов, моделирование поведения среды и т.д.
В основе векторного конвейера лежит то же самое разбиение операции на уровни или этапы выполнения, но он дополняется средствами аппаратной поддержки, позволяющими по информации о векторах организовать последовательную загрузку конвейера элементами векторов, учитывая их длину.
Пусть необходимо выполнить операцию C = A × B, т.е. cj = aj + bj, j = 1, ...,N. Пусть на регистрах СОЗУ записаны вектора A и B. Группа регистров отведена для результатов C. Для управления этим процессом известны дескрипторы векторов DA ,DB ,DC, где D = {a , h , N},
= A,B,C,h — шаг переадресации. Если загрузка векторов производится всегда в одни и те же регистры АЛУ, то достаточно знать значение N. Может задаваться маска M длиной N, состоящая из нулей и единиц. Каждый элемент M соответствует элементу вектора-результата C. Если элемент mj = 1 (логическая переменная), то операция получения cj производится, в противном случае соответствующие элементы векторов пропускаются. Это применимо для альтернативного счёта в соответствии со значением логических переменных.Пусть операция умножения выполняется за три этапа. Тогда можно представить временную диаграмму получения N результатов при предположении о назначении функциональных устройств (рис. 3.2.1).
Рис. 3.2.1 Умножение векторов на конвейере
В составе АЛУ может быть два и более конвейерных устройств, специализированных каждое для выполнения некоторой операции. Тогда возможно и эффективно "зацепление" векторов, иллюстрируемое примером на рис. 3.2.2 для выполнения сложной операции над векторами: D=A× B+C.
Рис. 3.2.2 "Зацепление" векторов
Здесь два конвейера образовали один, с глубиной перекрытия n = n× + n+. Очередной результат умножения немедленно направляется на конвейер сложения, куда параллельно направляется необходимый сомножитель.
В вычислительной технике повсеместно используется такая структура данных, как стек. Его применение при выполнении арифметических и логических операций в арифметическо-логическом устройстве (АЛУ) позволяет реализовать безадресную систему команд, что, в свою очередь, дает возможность минимизировать число обращений к оперативной памяти, осуществить буферизацию при многоуровневой памяти, кодировать большое число команд в одном слове.
Рассмотрим механизмы обработки информации на стеке и формирования безадресных команд.
Прежде всего - об идее применения безадресных команд.
Рассматривая структуру команд, мы можем отметить, что практически команды бывают одно-, двух-, трехадресные. Трехадресная команда, как правило, по законченности соответствует одному оператору, т.к. отображает действие над двумя операндами и результат. Двухадресная команда — это такая команда, где один из адресов подразумевается (например, аккумулятор или сумматор), или результат направляется по одному из указанных адресов. То же касательно одноадресной команды: по числу адресов - число обращений к памяти, не считая считывания самой команды.
Возникает вопрос: можно ли отделить загрузку регистров сверхоперативного запоминающего устройства (СОЗУ) от собственно выполнения команды, сделать эту загрузку опережающей, выполнение команды производить только с использованием подразумеваемых адресов СОЗУ и при этом в целом минимизировать количество обращений к ОП? Ответ приводит к структуре безадресных команд и к выполнению операций на стеке.
Стек представляет собой множество последовательно пронумерованных регистров СОЗУ или ячеек ОП, снабженное указателем вершины стека УВС, в котором автоматически при записи и считывании устанавливается номер (адрес) последнего занятого регистра — вершины стека. При записи в стек (загрузка стека) слово пишется в следующий по номеру регистр, а УВС увеличивается на единицу. При считывании извлекается слово с адресом, указанным в УВС. Затем УВС уменьшается на единицу. Таким образом, в стеке реализуется правило последний "пришел — первый ушел".
Адреса памяти фигурируют только в командах загрузки стека и записи из стека в память.
Значения выражений можно вычислять полностью безадресным способом.
Команда, состоящая только из кода операции, извлекает из стека один или два операнда, выполняет операцию и заносит результат в стек. На рис. 3.3.1 приведен пример преобразования стека при выполнении трех команд программы.
Рис. 3.3.1 Выполнение команд на стеке
Вычисления с использованием стеков удобно задавать, описывать и программировать с помощью польской инверсной (бесскобочной) записи арифметических выражений ПОЛИЗ (предложил польский математик Лукашевич в 1929 г.). Запись производится по правилу "читаем арифметическое выражение слева направо и последовательно друг за другом выписываем встречающиеся операнды". Как только окажется, что все операнды некоторой операции выписаны, записываем знак этой операции, условно учитываем вместо операндов и знака операции потенциальное имя ее результата. Это может породить возможность записи новой операции; или же будем продолжать выписывать операнды, если условно учтенный результат не позволяет записать знак операции. Запись на ПОЛИЗ состоит из цепочек имен и цепочек операций.
Например,
y := (k + (l - mn))(a - b)
yklmn × - + ab - × :=Последовательность символов в ПОЛИЗ может рассматриваться как программа вычисления значения данного выражения, если под именами понимать команды загрузки стека (кроме случая, когда имени следует знак операции :=, тогда это имя определяет запись из стека), а под знаками операций — безадресные команды, содержащие только коды операций. Удобно ввести команду вида Зп У — записи из стека по адресу У. Тогда мы получим окончательный вид программы
klmn × - + ab - × Зп Y (3.1)
Не будем отображать УВС, интерпретируя стек магазинной памятью. Тогда схема выполнения данной программы сводится к представленной на рис. 3.3.2
Рис. 3.3.2 Выполнение программы на стеке
4. Вычислительные системы нетрадиционной архитектуры
Однородные вычислительные структуры или среды (ОВС), как правило, относятся к типу МКМД и представляют собой регулярную решетку из однотипных процессорных элементов (ПЭ).