ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.12.2021
Просмотров: 1197
Скачиваний: 2
4 1 6 Глава 9. Основные направления в архитектуре процессоров
Еще одной метрикой, характеризующей конвейерный процессор, является
эф-
фективность Е
— доля ускорения, приходящаяся на одну ступень конвейера:
В качестве третьей метрики часто выступает
пропускная способность
или
произ-
водительность Р —
эффективность, деленная на длительность тактового периода:
При эффективность стремится к единице, а производительность — к ча-
стоте тактирования конвейера:
Нелинейные конвейеры
Конвейер не всегда представляет собой линейную цепочку этапов. В ряде ситуа-
ций оказывается выгодным, когда функциональные блоки соединены между со-
бой не последовательно, а в соответствии с логикой обработки, при этом одни бло-
ки в цепочке могут пропускаться, а другие — образовывать циклические структуры.
Это позволяет с помощью одного и того же конвейера одновременно вычислять
более одной функции, однако если эти функции конфликтуют между собой, то
такой конвейер трудно загрузить полностью! Структура нелинейного конвейера,
одновременно вычисляющего две функции
X
и
Y,
приведена на рис. 9.2. Там же
показана последовательность, в которой функциями X и У востребуются те или
иные функциональные блоки.
Рис. 9.2. Нелинейный конвейер
Чтобы определить, когда пора приступать к повторному вычислению той или
иной функции, необходимо построить диаграмму однократной реализации этой
функции и отследить по ней моменты, когда такой запуск не приведет к конфлик-
ту, связанному с одновременным обращением к одному и тому же функциональ-
ному блоку.
Так, в ходе реализации функции
X
запуск очередного ее вычисления возможен
после 1,3 и 6 тактов. Запуск параллельного вычисления функции У возможен после
Конвейеризация вычислений 4 1 7
2 и 4 тактов. При запуске функции
У
очередной ее запуск позволен после тактов 1,
3 и 5, а параллельный запуск функции
X
допустим после 2
и
4 тактов.
Конвейер команд
Идея конвейера команд была предложена в 1956 году академиком С. А.Лебеде-
вым. Как известно, цикл команды представляет собой последовательность этапов.
Возложив реализацию каждого из них на самостоятельное устройство и последо-
вательно соединив такие устройства, мы получим классическую схему конвейера
команд. Для иллюстрации воспользуемся примером, приведенным в [200]. Выде-
лим в цикле команды шесть этапов:
1.
Выборка команды (ВК).
Чтение очередной команды из памяти и занесение ее
в регистр команды.
2.
Декодирование команды (ДК).
Определение кода операции и способов адреса-
ции операндов.
3.
Вычисление адресов операндов (ВА).
Вычисление исполнительных адресов
каждого из операндов в соответствии с указанным в команде способом их адре-
саций.
4.
Выборка операндов
(ВО). Извлечение операндов из памяти. Эта операция не
нужна для операндов, находящихся в регистрах.
5.
Исполнение команды (ИК).
Исполнение указанной операции.
6.
Запись результата (ЗР),
Занесение результата в память.
Рис. 9.3. Логика работы конвейера команд
На рис. 9.3 показан конвейер с шестью ступенями, соответствующими шести
этапам цикла команды. В диаграмме предполагается, что каждая команда обяза-
тельно проходит все шесть ступеней, хотя этот случай не совсем типичен. Так, ко-
манда загрузки регистра не требует этапа ЗР. Кроме того, здесь принято, что все
этапы могут выполняться одновременно. Без конвейеризации выполнение девяти
команд заняло бы 9 х 6 = 54 единицы времени. Использование конвейера позво-
ляет сократить время обработки до 14 единиц.
14 За*. 470
418 Глава 9. Основные направления в архитектуре процессоров
Конфликты в конвейере команд
Полученное в примере число 14 характеризует лишь потенциальную производи-
тельность конвейера команд. На практике в силу возникающих в конвейере конф-
ликтных ситуаций достичь такой производительности не удается. Конфликтные
ситуации в конвейере принято обозначать термином риск (hazard), а обусловлены
они могут быть тремя причинами:
- попыткой нескольких команд одновременно обратиться к одному и тому же
ресурсу ВМ (структурный риск);
- взаимосвязью команд по данным (риск по данным);
-
неоднозначностью при выборке следующей команды в случае команд перехода
(риск по управлению).
Структурный риск
(конфликт по ресурсам) имеет место, когда несколько ко-
манд, находящихся на разных ступенях конвейера, пытаются одновременно ис-
пользовать один и тот же ресурс, чаще всего — память. Так, в типовом цикле ко-
манды сразу три этапа (ВК, 80 и ЗР) связаны с обращением к памяти. Диаграмма
(см. рис. 9.3) показывает, что все три обращения могут производиться одновре-
менно, однако на практике это не всегда возможно. Подобных конфликтов частич-
но удается избежать за счет модульного Построения памяти и использования кэш-
памяти — имеется вероятность того, что команды будут обращаться либо к разным
модулям ОП, либо одна из них станет обращаться к основной памяти, а другая -
к кэш-памяти. С этих позиций выгоднее разделять кэш-память команд и кэш-па-
мять данных. Конфликты из-за одновременного обращения к памяти могут и не
возникать, поскольку для многих команд ступени выборки операнда и записи ре-
зультата часто не требуются. В целом, влияние структурного риска на производи-
тельность конвейера по сравнению с другими видами рисков сравнительно неве-
лико.
Риск по данным,
в противоположность структурному риску — типичная и регу-
данным положим, что две команды в конвейере (i и j) предусматривают обраще-
ние к одной и той же переменной
х,
причем команда i предшествует команде)
.
В общем случае между
i
и j ожидаемы три типа конфликтов по данным (рис. 9.4):
-Чтение после записи»
(ЧПЗ): команда
j
читает
х
до того, как команда
i
успела
записать новое значение
х,
то есть j ошибочно получит старое значение
х
вмес-
то нового. '
- «Запись после чтения»
(ЗПЧ): команда; j записывает новое значение
х
до того,
как команда
i
успела прочитать x:, то есть команда i ошибочно получит новое
значение
х
вместо старого.
- «Запись после записи»
(ЗПЗ): команда
j
записывает новое значение
х
прежде,
чем команда i успела записать в качестве
х
свое значение, то есть
х
ошибочно
содержит i-e значение
х
вместо
j-
го.
Возможен и четвертый случай, когда команда j читает x прежде команды
i.
Этот
случай не вызывает никаких конфликтов, поскольку как i, так
j
получат верное
значение
х.
Конвейеризация вычислений 4 1 9
в
Рис- 9.4. Конфликты поданным:
а
— «Чтение после записи»;
б —
-Запись после чтения-;
в — «Запись после записи»
Наиболее частый вид конфликтов по данным — ЧПЗ, поскольку операция чте-
ния в цикле команды (этап ВО) предшествует операции записи (этап ЗР). По той
же причине конфликты типа ЗПЧ большой проблемы не представляют. Сложнос-
ти появляются, только если структура конвейера допускает запись прежде чтения
или если команды в конвейере обрабатываются в последовательности, отличной
от предписанной программой. Такое возможно, если командам в конвейере разре-
шается «догонять» предшествующие им команды, приостановленные из-за како-
го-то конфликта. Конфликт типа ЗПЗ также не вызывает особых проблем в кон-
вейерах, где команды следуют в порядке, определенном программой, и могут
производить запись только на этапе ЗР. В худшем случае, когда одна команда дого-
няет другую из-за приостановки последней, имеет место конфликт по ресурсу —
попытка одновременного доступа к одной и той же ячейке.
В борьбе с конфликтами по данным выделяют два аспекта: своевременное об-
наружение потенциального конфликта и его устранение. Признаком возникнове-
ния конфликта по данным между двумя командами i и
j
служит невыполнение
хотя бы одного из трех условий Бернстейна (Bernstein's Conditions):
Где
O(k) —
множество ячеек, изменяемых командой
k; 1(1) —
множество ячеек,
читаемых командой l;
Критерий может быть распространен и на большее число команд: для трех ко-
манд подобных уравнений будет 9, для четырех команд — 18 (по три на каждую
пару). Соблюдение соотношений является достаточным, но не необходимым ус-
ловием, поскольку в ряде случаев коллизий может и не быть.
Для борьбы с конфликтами по данным применяются как программные, так и ап-
паратные методы.
Программные методы ориентированы на устранение самой возможности кон-
фликтов еще на стадии компиляции программы. Оптимизирующий компилятор
пытается создать такой объектный код, чтобы между командами, склонными к
4 2 0 Глава 9. Основные направления в архитектуре процессоров
конфликтам, находилась достаточное количество нейтральных в этом плане ко-
манд. Если такое не удается, то между конфликтующими командами компилятор
вставляет необходимое количество команд типа «Нет операции»,
Фактическое разрешение конфликтов возлагается на аппаратные методы. Наи-
более очевидным решением является остановка команды; на несколько тактов с
тем, чтобы команда
i
успела завершиться или, по крайней мере, миновать ступень
конвейера, вызвавшую конфликт. Соответственно задерживаются и команды, сле-
дующие в конвейере за j-й командой. Данную ситуацию называют
«пузырьком»
в
конвейере. Иногда приостанавливают только команду
j,
не задерживая следую-
щие за ней команды. Это более эффективный прием, но его реализация усложняет
конвейер.
Понятно, что остановки конвейера снижают его эффективность и разработчи-
ки ВМ всячески стремятся сократить общее число остановок или хотя бы их дли-
тельность. Поскольку наиболее частые конфликты по данным — это ЧПЗ, основ-
ные усилия тратятся на противодействие именно этому типу конфликтов. Среди
известных методов борьбы с ЧПЗ наибольшее распространение получил прием
ускоренного продвижения информации
(forwarding). Обычно между двумя сосед-
ними ступенями конвейера располагается буферный регистр, через который пред-
шествующая ступень передает результат своей работы на последующую ступень,
то есть передача информации возможна лишь между соседними ступенями кон-
вейера. При ускоренном продвижении, когда для выполнения команды требуется
операнд, уже вычисленный предыдущей командой, этот операнд может быть по-
лучен непосредственно из соответствующего буферного регистра, минуя все про-
межуточные ступени конвейера. С данной целью в конвейере предусматриваются
дополнительные тракты пересылки информации (тракты опережения, тракты об-
хода), снабженные средствами мультиплексирования.
Наибольшие проблемы при создании эффективного конвейера обусловлены
командами, изменяющими естественный порядок вычислений
1
. Простейший кон-
вейер ориентирован на линейные программы. В нем ступень выборки извлекает
команды из последовательных ячеек памяти, используя для этого счетчик команд
(СК). Адрес очередной команды в линейной программе формируется автомати-
чески, за счет прибавления к содержимому СК числа, равного длине текущей ко-
В них обязательно присутствуют команды управления, изменяющие последова-
возврат из процедуры и т. п. Доля подобных команд в программе оценивается
как 10-20% (по некоторым источникам она существенно больше). Выполнение
команд, изменяющих последовательность вычислений (в дальнейшем будем
их называть командами перехода), может приводить к приостановке конвейе-
ра на несколько тактов, из-за чего производительность процессора снижается.
Приостановки конвейера при выполнении команд перехода обусловлены дву-
мя факторами.
1
В фон-неймановской ВМ команды размещаются в ячейках памяти и извлекаются для выполнения
в том же порядке, в каком они следуют в программе. Такую последовательность выполнения команд
программы называют естественной.