
- •Оглавление
- •Глава 9 Основные направления в архитектуре процессоров 1
- •Глава 9 Основные направления в архитектуре процессоров
- •Конвейеризация вычислений
- •Конвейер команд
- •Конфликты в конвейере команд
- •Методы решения проблемы условного перехода
- •Предсказание переходов
- •Статическое предсказание переходов
- •Динамическое предсказание переходов
- •Суперконвейерные процессоры
- •Архитектуры с полным и сокращенным набором команд
- •Основные черты risc-архитектуры
- •Регистры в risc-процессорах
- •Преимущества и недостатки risc
- •Суперскалярные процессоры
Оглавление
Глава 9 Основные направления в архитектуре процессоров 1
Конвейеризация вычислений 1
Конвейер команд 2
Конфликты в конвейере команд 2
Методы решения проблемы условного перехода 5
Предсказание переходов 5
Статическое предсказание переходов 6
Динамическое предсказание переходов 7
Суперконвейерные процессоры 8
Архитектуры с полным и сокращенным набором команд 9
Основные черты RISC-архитектуры 10
Регистры в RISC-процессорах 11
Преимущества и недостатки RISC 12
Суперскалярные процессоры 13
Глава 9 Основные направления в архитектуре процессоров
Ранее уже были рассмотрены основные составляющие центрального процессора. В данном разделе основное внимание уделено вопросам общей архитектуры процессоров как единого устройства и способам- повышения их производительности.
Конвейеризация вычислений
Совершенствование элементной базы уже не приводит к кардинальному росту производительности ВМ. Более перспективными в этом плане представляются архитектурные приемы, среди которых один из наиболее значимых — конвейеризация.
В архитектуре вычислительных машин можно найти множество объектов, где конвейеризация обеспечивает ощутимый прирост производительности ВМ. Ранее уже рассматривались два таких объекта - операционные устройства и память, однако наиболее ощутимый эффект достигается при конвейеризации этапов машинного цикла.
По способу синхронизации работы ступеней конвейеры могут быть синхронными и асинхронными. Для традиционных ВМ характерны синхронные
конвейеры. Связано это, прежде всего, с синхронным характером работы процессоров. Ступени конвейеров в процессоре обычно располагаются близко друг от друга, благодаря чему тракты распространения сигналов синхронизации получаются достаточно короткими и фактор «перекоса» сигналов становится не столь существенным. Асинхронные конвейеры оказываются полезными, если связь между ступенями не столь сильна, а длина сигнальных трактов между разными ступенями сильно рознится. Примером асинхронных конвейеров могут служить систолические массивы.
Конвейер команд
Идея конвейера команд была предложена в 1956 году академиком С. А. Лебедевым. Как известно, цикл команды представляет собой последовательность этапов. Возложив реализацию каждого из них на самостоятельное устройство и последовательно соединив такие устройства, мы получим классическую схему конвейера команд. Для иллюстрации воспользуемся примером. Выделим в цикле команды шесть этапов:
1. Выборка команды (ВК). Чтение очередной команды из памяти и занесение ее в регистр команды.
2. Декодирование команды (ДК). Определение кода операции и способов адресации операндов.
3. Вычисление адресов операндов (ВА). Вычисление исполнительных адресов каждого из операндов в соответствии с указанным в команде способом их адресаций.
4. Выборка операндов (ВО). Извлечение операндов из памяти. Эта операция не нужна для операндов, находящихся в регистрах.
5. Исполнение команды (ИК). Исполнение указанной операции.
6. Запись результата (ЗР), Занесение результата в память.
Конфликты в конвейере команд
Полученное в примере число 14 характеризует лишь потенциальную производительность конвейера команд. На практике в силу возникающих в конвейере конфликтных ситуаций достичь такой производительности не удается. Конфликтные ситуации в конвейере принято обозначать термином риск (hazard), а обусловлены они могут быть тремя причинами:
- попыткой нескольких команд одновременно обратиться к одному и тому же
ресурсу ВМ (структурный риск);
- взаимосвязью команд по данным (риск по данным);
- неоднозначностью при выборке следующей команды в случае команд перехода
(риск по управлению).
Структурный риск (конфликт по ресурсам) имеет место, когда несколько команд, находящихся на разных ступенях конвейера, пытаются одновременно использовать один и тот же ресурс, чаще всего — память. Так, в типовом цикле команды сразу три этапа связаны с обращением к памяти. Подобных конфликтов частично удается избежать за счет модульного Построения памяти и использования кэш памяти - имеется вероятность того, что команды будут обращаться либо к разным модулям ОП, либо одна из них станет обращаться к основной памяти, а другая -к кэш-памяти. С этих позиций выгоднее разделять кэш-память команд и кэш-память данных. Конфликты из-за одновременного обращения к памяти могут и не возникать, поскольку для многих команд ступени выборки операнда и записи результата часто не требуются. В целом, влияние структурного риска на производительность конвейера по сравнению с другими видами рисков сравнительно невелико.
Риск по данным, в противоположность структурному риску. Три типа конфликтов по данным:
-Чтение после записи» (ЧПЗ): команда j читает х до того, как команда i успела записать новое значение х, то есть j ошибочно получит старое значение х вместо нового. '
- «Запись после чтения» (ЗПЧ): команда; j записывает новое значение х до того,
как команда i успела прочитать x:, то есть команда i ошибочно получит новое значение х вместо старого.
- «Запись после записи» (ЗПЗ): команда j записывает новое значение х прежде,
чем команда i успела записать в качестве х свое значение, то есть х ошибочно содержит i-e значение х вместо j- го.
Возможен и четвертый случай, когда команда j читает x прежде команды i. Этот случай не вызывает никаких конфликтов, поскольку как i, так j получат верное значение х.
Наиболее частый вид конфликтов по данным - ЧПЗ, поскольку операция чтения в цикле команды (этап ВО) предшествует операции записи (этап ЗР). По той же причине конфликты типа ЗПЧ большой проблемы не представляют. Сложности появляются, только если структура конвейера допускает запись прежде чтения или если команды в конвейере обрабатываются в последовательности, отличной от предписанной программой. Такое возможно, если командам в конвейере разрешается «догонять» предшествующие им команды, приостановленные из-за какого-то конфликта. Конфликт типа ЗПЗ также не вызывает особых проблем в конвейерах, где команды следуют в порядке, определенном программой, и могут производить запись только на этапе ЗР. В худшем случае, когда одна команда догоняет другую из-за приостановки последней, имеет место конфликт по ресурсу — попытка одновременного доступа к одной и той же ячейке.
Фактическое разрешение конфликтов возлагается на аппаратные методы. Наиболее очевидным решением является остановка команды; на несколько тактов с тем, чтобы команда i успела завершиться или, по крайней мере, миновать ступень конвейера, вызвавшую конфликт. Соответственно задерживаются и команды, следующие в конвейере за j-й командой. Данную ситуацию называют «пузырьком» в конвейере. Иногда приостанавливают только команду j, не задерживая следующие за ней команды. Это более эффективный прием, но его реализация усложняет конвейер.
Понятно, что остановки конвейера снижают его эффективность и разработчики ВМ всячески стремятся сократить общее число остановок или хотя бы их длительность. Поскольку наиболее частые конфликты по данным - это ЧПЗ, основные усилия тратятся на противодействие именно этому типу конфликтов. Среди известных методов борьбы с ЧПЗ наибольшее распространение получил прием ускоренного продвижения информации (forwarding). Обычно между двумя соседними ступенями конвейера располагается буферный регистр, через который предшествующая ступень передает результат своей работы на последующую ступень, то есть передача информации возможна лишь между соседними ступенями конвейера. При ускоренном продвижении, когда для выполнения команды требуется операнд, уже вычисленный предыдущей командой, этот операнд может быть получен непосредственно из соответствующего буферного регистра, минуя все про-' межуточные ступени конвейера. С данной целью в конвейере предусматриваются дополнительные тракты пересылки информации (тракты опережения, тракты обхода), снабженные средствами мультиплексирования.
Наибольшие проблемы при создании эффективного конвейера обусловлены командами, изменяющими естественный порядок вычислений1. Простейший конвейер ориентирован на линейные программы. В нем ступень выборки извлекает команды из последовательных ячеек памяти, используя для этого счетчик команд (СК). Адрес очередной команды в линейной программе формируется автоматически, за счет прибавления к содержимому СК числа, равного длине текущей команды. В них обязательно присутствуют команды управления, изменяющие последовательно. Доля подобных команд в программе оценивается как 10-20% (по некоторым источникам она существенно больше). Выполнение команд, изменяющих последовательность вычислений (в дальнейшем будем их называть командами перехода), может приводить к приостановке конвейера на несколько тактов, из-за чего производительность процессора снижается. Приостановки конвейера при выполнении команд перехода обусловлены двумя факторами.
Первый фактор характерен для любой команды перехода и связан с выборкой команды из точки перехода (по адресу, указанному в команде перехода). То, что текущая команда относится к командам перехода, становится ясным только после декодирования (после прохождения ступени декодирования), то есть спустя два такта от момента поступления Команды на конвейер. За это время на первые ступени конвейера уже поступят новые команды, извлеченные в предположении, что естественный порядок вычислений не будет нарушен. В случае перехода эти ступени нужно очистить и загрузить в конвейер команду, расположенную по адресу перехода, для чего нужен исполнительный адрес последней. Поскольку в командах перехода обычно указаны лишь способ адресации и адресный код, исполнительной ступени конвейера. Таким образом, реализация перехода в конвейере требует определенных дополнительных операций, выполнение которых равносильно остановке конвейера как минимум на два такта.
Вторая причина нарушения ритмичности работы конвейера имеет отношение только к командам условного перехода
Для сокращений задержек, обусловленных выборкой команды из точки перехода, применяются несколько подходов:
» вычисление исполнительного адреса перехода на ступени декодирования команды;
- использование буфера адресов перехода;
- использование кэш-памяти для хранения команд, расположенных в точке перехода;
- использование буфера цикла.
В результате декодирования команды выясняется не только ее принадлежность к командам перехода, но также способ адресации и адресный код точки перехода. Это позволяет сразу же приступить к вычислению исполнительного адреса перехода, не дожидаясь передачи команды на третью ступень конвейера, и тем самым сократить время остановки конвейера с двух тактов до одного. Для реализации этой идеи в состав ступени декодирования вводятся дополнительные сумматоры, с помощью которых и вычисляется исполнительный адрес точки перехода.
Буфер адресов перехода (ВТВ, Branch Target Buffer) представляет собой кэшпамять небольшой емкости, в которой хранятся исполнительные адреса точек перехода нескольких последних команд, для которых переход имел место. В роли тегов выступают адреса соответствующих команд. Перед выборкой очередной команды ее адрес (содержимое счетчика команд) сравнивается с адресами команд, представленных в ВТВ. Для команды, найденной в буфере адресов перехода, исполнительный адрес точки перехода не вычисляется, а берется из ВТВ, благодаря чему выборка команды из точки перехода может быть начата на один такт раньше. Команда, ссылка на которую в ВТВ отсутствует, обрабатывается стандартным образом. Если это команда перехода, то полученный при ее выполнении исполнительный адрес точки перехода заносится в ВТВ, при условии, что команда завершилась переходом. При замещении информации в ВТВ обычно применяется алгоритм LRU.
Применение ВТВ дает наибольший эффект, когда отдельные команды перехода в программе выполняются многократно, что типично для циклов. Обычно ВТВ используется не самостоятельно, а в составе других, более сложных схем компенсации конфликтов по управлению.
Кэш-память команд, расположенных в точке перехода (BTIC, Branch Target Instruction Cache), - это усовершенствованный вариант ВТВ, где в кэш-память помимо исполнительного адреса команды в точке перехода записывается также и код этой команды. За счет увеличения емкости кэш-памяти BTIC позволяет при повторном выполнении команды перехода исключить не только этап вычисления исполнительного адреса точки перехода, но и этап выборки расположенной там команды. Преимущества данного подхода в наибольшей степени проявляются при многократном исполнении одних и тех же команд перехода, главным образом при реализации программных циклов.
Буфер цикла представляет собой маленькую быстродействующую память, входящую в состав первой ступени конвейера, где производится выборка команд. В буфере сохраняются коды « последних команд в той последовательности, в которой они выбирались. Когда имеет место переход, аппаратура сначала проверяет, нет ли нужной команды в буфере, и если это так, то команда извлекается из буфера. Стратегия наиболее эффективна при реализации циклов и итераций, чем и объясняется название буфера Если буфер достаточно велик, чтобы охватить все тело цикла, выборку команд из памяти достаточно выполнить только один раз в первой итерации, поскольку необходимые для последующих итераций команды уже находятся в буфере.
По принципу использования буфер цикла похож на BTIC, с той разницей, что в нем сохраняется последовательность выполнения команд, а сам буфер меньше по емкости и дешевле.
Среди ВМ, где реализован буфер цикла, можно упомянуть некоторые вычислительные машины фирмы CDC (Star 100,6600,7600) и суперЭВМ CRAY-1. Специализированная версия буфера цикла имеется и в микропроцессоре Motorola 68010, где он используется для особых циклов, включающих в себя команду «Уменьшение и переход по условию».