ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 342

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

4 5 8 Глава 9. Основные направления в архитектуре процессоров

В процессорах некоторых ВМ реализованы как суперскалярность, так и супер-

конвейеризация (рис. 9.45). Такое совмещение имеет место в микропроцессорах
Athlon и Duron фирмы AMD, причем охватывает оно не только конвейер команд,
но и блок обработки чисел в форме с плавающей запятой.

Особенности реализации

суперскалярных процессоров

Поскольку в реальных суперскалярных процессорах множественность функциональ-
ных блоков сочетается с множественностью конвейеров команд, таким процессорам
присущи все виды зависимостей, характерные для одинарных конвейеров, причем

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

команд на исполнение и проблемы последовательности завершения команд.

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

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

 неупорядоченная вы-

дача команд

 (out-of-order issue). Термин

 упорядоченная выдача команд

 (in-order

issue) применяют, когда команды покидают ступени, предшествующие ступени

исполнения, в определенном программой порядке. В обоих случаях завершение

команд обычно неупорядочено

 (неупорядоченное завершение команд —

 out-of-order

completion), и это является второй проблемой.

 Упорядоченное завершение

 проис-

ходит реже. Например, в последовательности

даже если команда умножения MUL поступит в исполнительный блок до команды

сложения ADD, умножение может потребовать много циклов, из-за чего команда MUL
будет завершена позже, чем ADD, В современных микропроцессорах каждая коман-

да разбивается на простейшие микрооперации, которые далее выполняются супер-

скалярным процессорным ядром в порядке, который удобен процессору.

В суперскалярных процессорах, с их множественными конвейерами и неупо-

рядоченными выдачами/завершениями, взаимозависимость команд представляет

серьезную проблему. Кроме того, существует еще один фактор, характерный толь-

ко для суперскалярных процессоров, — конфликт по функциональному блоку, ког-

да на него претендуют несколько команд, поступивших из разных конвейеров.

Пусть имеется последовательность

Зависимости между командами здесь нет, однако если в ЦП имеется только

одно АЛУ, одновременное выполнение указанных операций невозможно.

Стратегии выдачи и завершения команд

В режиме параллельного выполнения нескольких команд процессор должен опре-

делить, в какой очередности ему следует:

выбирать команды из памяти;


background image

Суперскалярные процессоры  4 5 9

-

выполнять эти команды;

-позволять командам изменять содержимое регистров и ячеек памяти.

Для достижения максимальной загрузки всех ступеней своих конвейеров су-

перскалярный процессор должен варьировать все перечисленные виды последо-
вательностей, но так, чтобы получаемый результат был идентичен результату при
выполнении команд в порядке, определенном программой. Значит, процессор обя-

зан учитывать все виды зависимостей и конфликтов.

В самом общем виде стратегии выдачи и завершения команд можно сгруппиро-

вать в такие категории:

- упорядоченная выдача и упорядоченное завершение;
- упорядоченная выдача и неупорядоченное завершение;
- неупорядоченная выдача и неупорядоченное завершение.

Проанализируем каждый из этих вариантов на примере суперскалярного про-

цессора с двумя конвейерами [200]. Процессор способен одновременно выбирать
и декодировать две команды, причем передача обеих команд на декодирование

должна также производиться одновременно. В состав процессора входят три от-
дельных функциональных блока (ФБ) и два устройства, обеспечивающие запись

результата. В рассматриваемом примере предполагается существование следую-
щих ограничений на выполнение программного кода из шести команд (I1-16):
- I1 требует для своего выполнения двух циклов процессора;
- I3 и I4 имеют конфликт за обладание одним и тем же ФБ;
- I5 зависит от значения, вычисляемого командой I4;
-I5 и I6 конфликтуют за обладание одним и тем же ФБ.

Упорядоченная выдача

 и

 упорядоченное завершение.

 Наиболее простым в реа-

лизации вариантом является выдача декодированных команд на исполнение в том

порядке, в котором они должны выполняться

 по

 программе (упорядоченная выда-

ча), с сохранением той же последовательности записи результатов (упорядочен-
ное завершение). Хотя такая стратегия и применялась в первых процессорах типа

Pentium, сейчас она практически не встречается. Тем не менее ее обычно берут
в качестве точки отсчета при сравнении различных стратегий выдачи и заверше-
ния. Согласно данному принципу, все что затрудняет завершение команды в од-
ном конвейере, останавливает и другой конвейер, так как команды должны поки-

дать конвейеры, соответствуя порядку поступления на них. Пример использования

подобной стратегии показан на рис. 9.46.

Здесь производятся одновременная выборка и декодирование двух команд.

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

более чем один такт процессора.

В рассматриваемом примере время задержки от декодирования первой коман-

ды до записи последнего результата составляет 8 тактов.

Упорядоченная выдача и неупорядоченное завершение.

 Стратегии с неупо-

рядоченным завершением дают возможность одному из конвейеров продолжать


background image

I

4 6 0 Глава 9. Основные направления в архитектуре процессоров

Рис. 9.46. Упорядоченная выдача и упорядоченное завершение

работать при «заторе» в другом, при этом команды, стоящие в программе «позже»,
могут быть фактически выполнены раньше предыдущих, «застрявших» в другом
конвейере. Естественно, процессор, должен гарантировать, что результаты не бу-

дут записаны в память, а регистры не будут модифицироваться в неправильной по-

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

Рис, 9.47. Упорядоченная выдача и неупорядоченное завершение

Проиллюстрируем стратегию с упорядоченной выдачей и неупорядоченным

завершением (рис. 9.47). При заданных ей условиях допускается, что команда I2

может быть завершена еще до окончания исполнения команды И. Это позволяет
команде I3 завершиться на один такт раньше, вследствие чего результаты выпол-
нения команд И и I3 записываются в одном и том же такте. При неупорядоченной
выдаче в любой момент времени в стадии исполнения может находиться любое
число команд, а степень параллелизма ограничена только числом функциональ-
ных блоков. По сравнению с предыдущей стратегией, возможность неупорядочен-
ного завершения команд привела к сокращению времени выполнения шести ко-
манд на один цикл процессора.

Неупорядоченная выдача

 и

 неупорядоченное завершение.

 Неупорядоченная

выдача развивает предыдущую концепцию, разрешая процессору нарушать пред-
писанный программой порядок выдачи команд на исполнение. Чтобы обеспечить

неупорядоченную выдачу команд, в конвейере необходимо максимально развя-
зать ступени декодирования и исполнения. Это обеспечивается с помощью буфер-

ной памяти, называемой

 окном команд.

 Каждая декодированная команда сначала

помещается в окно команд. Процессор может продолжать выборку и декодирова-

ние новых команд вплоть до полного заполнения буфера. Выдача команд из буфе-

ра на исполнение определяется не последовательностью их поступления, а мерой


background image

Суперскалярные процессоры  4 6 1

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

Рис. 9.48. Неупорядоченная выдача и неупорядоченное завершение

Стратегию иллюстрирует рис. 9.48. В каждом цикле процессора две команды

из ступени декодирования пересылаются в окно команд (с учетом ограничения на
размер буфера). Выдача команд из буфера производится по мере их готовности.
Так, в рассматриваемом примере возможна выдача команды I6 до выдачи команды
I5 (напомним, что I5 зависит от I4, а I6 — нет). Таким образом, сберегается один
такт, как в ступени исполнения команды (ИК), так и в ступени записи результата
(ЗР), и сквозная экономия по сравнению с рис. 9.47 составляет один цикл процес-

сора. На рисунке изображено окно команд, но оно не является дополнительной
ступенью конвейера.

Стратегии неупорядоченной выдачи и неупорядоченного завершения также

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

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

Аппаратная поддержка суперскалярных операций

Из предыдущих рассуждений следует, что неупорядоченные выдача и завершение

команд — это дополнительный потенциал повышения производительности супер-
скалярного процессора, для реализации которого, вместе с тем, необходимо решить

две проблемы:

- устранить зависимость команд по данным (речь идет о зависимостях типа ЧПЗ

и ЗПЗ), то есть исключить использование в качестве операнда «устаревшего»

значения регистра и не допускать, чтобы очередная команда программы из-за

нарушения последовательности выполнения команд занесла свой результат
в регистр еще до того, так это сделала предшествующая команда;

- сохранить такой порядок выполнения команд, чтобы общий итог вычислений

остался идентичным результату, получаемому при строгом соблюдении про-
граммной последовательности.

Несмотря на то что обе задачи в принципе могут быть решены чисто программ-

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


background image

4 6 2 Глава 9. Основные направления в архитектуре процессоров

ными средствами. Для устранения зависимости по данным используется прием,
известный как

 переименование регистров.

 Способ решения второй проблемы обоб-

щенно называют

 переупорядочиванием команд

 или

 откладыванием исполнения ко-

манд.

Переименование регистров

Когда команды выдаются и завершаются упорядоченно, каждый регистр в любой

точке программы содержит именно то значение, которое диктуется программой.

Применение стратегий с неупорядоченной выдачей и завершением команд ведет

к тому, что запись в регистры может происходить также неупорядоченно и отдель-
ные команды, обратившись к какому-то регистру, вместо нужного получат «уста-
ревшее» или «опережающее» значение. Пусть имеется последовательность команд:

При неупорядоченных выдаче/завершении возможны ситуации, приводящие

к неверному результату, например:

-

 команда I2 была исполнена до того, как И успела записать в регистр R2 свой

результат, то есть I2 использовала «старое» содержимое R2;

-

 команда I3 исполнена раньше, чем И, в результате чего неверный результат бу-

дет получен в I2, а по завершении цепочки из трех команд в R2 останется ре-
зультат И вместо результата I3.
Ясно, что здесь нарушение порядка выполнения команд ведет к неправильно-

му результату. Вводя новые регистры ROa и R2а, получим иную последовательность:

где возможность конфликта устранена. Такой метод известен как

 переименование

регистров

 (register renaming).,

Основная идея переименования регистров состоит в том, что каждый новый

результат записывается в один из свободных в данный момент дополнительных
регистров, при этом ссылки на заменяемый регистр во всех последующих коман-

дах соответственным образом корректируются. Программист, составляющий про-

грамму, имеет дело с именами логических регистров. Число физических регист-
ров аппаратного регистрового файла (АРФ) обычно больше числа логических.
«Лишние» регистры АРФ используются в процедуре переименования для времен-

ного хранения результатов до момента разрешения конфликтов по данным, после
чего значение из регистра временного хранения переписывается на свое «штат-

ное» место. В некоторых процессорах «лишние», регистры в АРФ отсутствуют, а для
поддержки переименования предусмотрены специальные структуры, например

рассматриваемый ниже

 буфер переименовaния.

На данном этапе будем считать, что дополнительные физические регистры вхо-

дят в состав АРФ. Когда выполняется команда, предусматривающая запись ре-
зультата в какой-то из логических регистров, например в R,, для временного хране-