19345

СУПЕРСКАЛЯРНЫЕ ПРОЦЕССОРЫ

Лекция

Информатика, кибернетика и программирование

АК ЛЕКЦИЯ № 22 СУПЕРСКАЛЯРНЫЕ ПРОЦЕССОРЫ Суперскалярные процессоры Поскольку возможности по совершенствованию элементной базы уже практически исчерпаны дальнейшее повышение производительности ВМ лежит в плоскости архитектурных решений. Как уже отмечалось од

Русский

2013-07-11

306.5 KB

49 чел.

АК ЛЕКЦИЯ № 22 СУПЕРСКАЛЯРНЫЕ ПРОЦЕССОРЫ

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

Поскольку возможности по совершенствованию элементной базы уже практически исчерпаны, дальнейшее повышение производительности ВМ лежит в плоскости архитектурных решений. Как уже отмечалось, один из наиболее эффективных подходов в этом плане - введение в вычислительный процесс различных уровней параллелизма Ранее рассмотренный конвейер команд - типичный пример такого подхода Тем же целям служат и арифметические конвейеры, где конвейеризации подвергается процесс выполнения арифметических операций. Дополнительный уровень параллелизма реализуется в векторных и матричных процессорах, но только при обработке многокомпонентных операндов типа векторов и массивов. Здесь высокое быстродействие достигается за счет одновременной обработки всех компонентов вектора или массива, однако подобные операнды характерны лишь для достаточно узкого круга решаемых задач. Основной объем вычислительной нагрузки обычно приходится на скалярные вычисления, то есть на обработку одиночных операндов, таких, например, как целые числа. Для подобных вычислений дополнительный параллелизм реализуется значительно сложнее, но тем не менее возможен и примером могут служить суперскалярные процессоры.

Суперскалярным (этот термин впервые был использован в 1987 году) называется центральный процессор (ЦП), который одновременно выполняет более чем одну скалярную команду. Это достигается за счет включения в состав ЦП нескольких самостоятельных функциональных (исполнительных) блоков, каждый из которых отвечает за свой класс операций и может присутствовать в процессоре в нескольких экземплярах. Структура типичного суперскалярного процессора показана на рис. 9.40, Процессор включает в себя шесть блоков: выборки команд, декодирования команд, диспетчеризации команд, распределения команд по функциональным блокам, блок исполнения и блок обновления состояния.

Рисунок 9.40 - Структура типичного суперскалярного процессора

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

Блок декодирования расшифровывает код операции, содержащийся в извлеченных из кэш-памяти командах, В некоторых суперскалярных процессорах, например в микропроцессорах фирмы Intel, блоки выборки и декодирования совмещены.

Блоки диспетчеризации и распределения взаимодействуют между собой и в совокупности играют в суперскалярном процессоре роль контроллера трафика. Оба блока хранят очереди декодированных команд. Очередь блока распределения часто рассредоточивается по несколько самостоятельным буферам — накопителям команд или схемам резервирования (reservation station), — предназначенным для хранения команд, которые уже декодированы, но еще не выполнены. Каждый накопитель команд связан со своим функциональным блоком (ФБ), поэтому число накопителей обычно равно числу ФБ, но если в процессоре используется несколько однотипных ФБ, то им придается общий накопитель. По отношению к блоку диспетчеризации накопители команд выступают в роли виртуальных функциональных устройств. Оба вида очередей показаны на рис. 9.41. В некоторых суперскалярных процессорах они объединены в единую очередь.

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

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

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

Подобный подход реализован в микропроцессоре Intel Pentium, где имеются два конвейера, каждый со своим АЛУ (рис. 9.42). Отметим, что здесь, в отличие от стандартного конвейера, в каждом цикле необходимо производить выборку более чем одной команды. Соответственно, память ВМ должна допускать одновременное считывание нескольких команд и операндов, что чаще всего обеспечивается за счет ее модульного построения.

Более интегрированный подход к построению суперскалярного конвейера показан на рис, 9.43. Здесь блок выборки (ВК) извлекает из памяти более одной команды и передает их через ступени декодирования команды и вычисления адресов операндов в блок выборки операндов (ВО). Когда операнды становятся доступными, команды распределяются по соответствующим исполнительным блокам. Обратим внимание, что операции «Чтение», «Запись» и «Переход» реализуются самостоятельными исполнительными блоками. Подобная форма суперскалярного процессора используется в микропроцессорах Pentium II и Pentium III фирмы Intel, а форма с тремя конвейерами - в микропроцессоре Athlon фирмы AMD.

По разным оценкам, применение суперскалярного подхода приводит к повышению производительности ВМ в пределах от 1,8 до 8 раз.

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

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

Особенности реализации суперскалярных процессоров

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

Первая из упомянутых проблем возникает, когда очередность выдачи декодированных команд на исполнительные блоки отличается от последовательности, предписанной программой. Подобная ситуация известна как неупорядоченная выдача команд (out-of-order issue). Термин упорядоченная выдача команд (in-order issue)  применяют, когда команды покидают ступени, предшествующие ступени исполнения, в определенном программой порядке. В обоих случаях завершение команд обычно неупорядочено (неупорядоченное завершение команд - out-of-order completion),  и это является второй проблемой. Упорядоченное завершение происходит реже. Например, в последовательности

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

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

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

Зависимости между командами здесь нет, однако если в ЦП имеется только одно АЛУ, одновременное выполнение указанных операций невозможно.

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

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

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

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

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

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

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

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

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

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

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

- I1 требует для своего выполнения двух циклов процессора;

- I3 и I4 имеют конфликт за обладание одним и тем же ФБ;

- I5 зависит от значения, вычисляемого командой I4; -I5 и I6 конфликтуют за обладание одним и тем же ФБ.

Упорядоченная выдача и упорядоченное завершение. Наиболее простым в реализации вариантом является выдача декодированных команд на исполнение в том порядке, в котором они должны выполняться по программе (упорядоченная выдача), с сохранением той же последовательности записи результатов (упорядоченное завершение). Хотя такая стратегия и применялась в первых процессорах типа Pentium, сейчас она практически не встречается. Тем не менее ее обычно берут в качестве точки отсчета при сравнении различных стратегий выдачи и завершения. Согласно данному принципу, все что затрудняет завершение команды в одном конвейере, останавливает и другой конвейер, так как команды должны покидать конвейеры, соответствуя порядку поступления на них. Пример использования подобной стратегии показан на рис. 9.46.

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

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

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

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

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

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

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

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

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

- устранить зависимость команд по данным (речь идет о зависимостях типа ЧПЗ и ЗПЗ), то есть исключить использование в качестве операнда «устаревшего» значения регистра и не допускать, чтобы очередная команда программы из-за нарушения последовательности выполнения команд занесла свой результат в регистр еще до того, так это сделала предшествующая команда;

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

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

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

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

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

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

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

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

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

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

На данном этапе будем считать, что дополнительные физические регистры входят в состав АРФ. Когда выполняется команда, предусматривающая запись результата в какой-то из логических регистров, например в R,, для временного хранения выделяется один из свободных в данный момент физических регистров АРФ (Rj). Во всех последующих командах, где в качестве логического регистра операнда упоминается Ri, ссылка на него заменяется ссылкой на физический регистр Rj. Таким образом, различные команды, где указан один и тот же логический регистр, могут обращаться'к различным физическим регистрам.

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

Переименование регистров может быть реализовано и по-другому - с помощью буфера переименования. Проиллюстрируем этот способ, вернувшись к ранее приведенной последовательности из трех команд. Схема содержит аппаратный регистровый файл (АРФ) на М регистров и буфер переименования (БП) на N входов (рис. 9.49). Будем считать, что число логических регистров также равно М, то есть в качестве временных регистров переименования используются только ячейки БП.

Каждому регистру АРФ придан бит «Значение достоверно» (ЗД). Единичное значение ЗД свидетельствует о том, что в регистре содержится корректное значение, которое может быть взято в качестве операнда команды.

Буфер переименования представляет собой ассоциативное запоминающее устройство или набор регистров с ассоциативным доступом. Каждая ячейка или регистр БП идентифицируется своим порядковым номером (0, 1,.,., N - 1). Информация, хранящаяся в ячейке или регистре БП (в каждом входе), представляется пятью полями:

- Вход занят(ВЗ). Однобитовое поле, единичное значение которого говорит о том, что этот вход БП недоступен.

- Номер переименованного регистра (Рг). В поле содержится номер логического регистра АРФ, для временной замены которого выделена данная ячейка БП.

- Значение. В поле хранится текущее содержимое регистра, указанного в поле Рг.

- Значение достоверно (ЗД). Однобитовое поле, единичное значение которого подтверждает достоверность содержимого поля «Значение» (если значение еще не вычислено, то ЗД = 0).

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

Предположим, что в исходный момент (рис. 9.50, а) в буфере переименования заполнены три первых входа, то есть имеем единицы в их поле ВЗ. Текущее состояние БП свидетельствует о том, что в предшествующих командах для записи результатов использовались регистры R4, R0 и Rl, и хотя результаты этих команд уже получены (в поле ЗД записана единица), вычисленные значения еще не переписаны в соответствующие регистры АРФ.

Поле ПП введено из-за того, что регистры могут переименовываться многократно. На рис. 9.50 б показан случай последовательного переименования регистра R1 Единица в поле ПП входа 3 указывает, что последнему переименованию регистра R1 соответствует именно данный вход. У всех остальных входов, ссылающихся на «устаревшие» значения R1, в этом поле будет 0. Если очередной команде требуется значение из регистра Rl, то из двух возможных чисел 10 и 15 будет взято 15, то есть значение того входа, где в поле ПП содержится единица.

Всякий раз, когда встречается команда, предполагающая запись результата в регистр, необходимо в буфере переименования выделить для этого регистра один из свободных входов (свободную ячейку) и правильно инициализировать его поля. Обычно буфер заполняется циклически, для чего имеются указатели первого и последнего свободного входов. Когда запрашивается очередной свободный вход, используется указатель «головы», и затем значение этого указателя соответствующим образом изменяется. Когда какой-то из входов освобождается, то корректируется значение указателя «хвоста». После выделения входа для регистра результата производится инициализация его полей: устанавливаются в единицу поля ВД и ПП в поле Рг заносится номер регистра, а в поле ЗД помещается 0, означающий, что поле «Значение» еще не содержит достоверного значения. Рисунок 9.50, в иллюстрирует состояние буфера переименования после выделения входа для регистра R2 в команде MUL.

Теперь рассмотрим, каким образом из буфера извлекаются значения операндов (поиск операндов в БП производится, если они отсутствуют в АРФ). В нашем примере это соответствует выборке операндов для команды MUL (значений регистров R0 и R1). Так как рассматриваемый буфер ассоциативный, то для получения значений операндов нужно произвести ассоциативный поиск последних значений регистров R0 и R1, то есть тех входов, где в поле Рг указаны искомые регистры, а в поле ПП содержится 1 (рис. 9.50, г).

Если передаваемой далее команде требуется значение регистра, которое еще не вычислено (недостоверно), вместо значения выдается идентификатор (номер) соответствующего входа буфера и ставится пометка, что это не значение, а номер входа. Рисунок 9.50, д показывает такую ситуацию для команды ADD. Первое, что делается при переименовании этой команды, - выделение свободного входа для регистра R3, конкретно - входа 4. Далее должны быть извлечены значения регистров R1 и R2. Поскольку последнее переименование регистра R1 достоверно, выборка содержащегося в регистре значения может быть произведена так, как это было описано выше. Однако значение R2 еще не вычислено, поэтому вместо него в исполнительную часть процессора, где будет выполняться команда ADD, пересылается номер соответствующего-входа буфера переименования (в нашем примере это 3).

Теперь в буфере переименования имеется несколько входов, ссылающихся на один и тот же регистр. Так, на рис. 9.50, е показана ситуация, когда команда SUB выдана до завершения команды MUL. В этом случае под регистр R2 выделен еще один вход (вход 5), в котором установлены соответствующие значения в полях ЗД и ПП Одновременно содержимое поля ПП входа 3, где хранилось предыдущее описание регистра R2, изменено на 0. Таким образом, с данного момента все последующие команды, ссылающиеся на регистр R2 как источник операнда, будут переадресовываться на вход 5. Это будет продолжаться до появления новой команды, с регистром результата R2

По завершении команды регистр результата должен быть модифицирован так, чтобы последующие команды могли получить доступ к вычисленному результату. Модификация базируется на идентификаторе входа буфера переименования, выделенного для запрошенного регистра результата. В нашем примере предположим, что завершилась команда MUL и результат 0 должен быть занесен во вход 3 (рисунок 9.50, ж), В поле ЗП этого входа помещается единица, показывающая, что значение регистра R2 уже доступно.

Последний момент - это освобождение входа буфера переименования (рисунок 9.50, з). Критерий освобождения входа будет рассмотрен позже.

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

После декодирования команд и переименования регистров команды передаются на исполнение. Как уже отмечалось, выдача команд в функциональные блоки может производиться неупорядоченно, по мере готовности. Поскольку порядок выполнения команд может отличаться от предписанного программой, необходимо обеспечить корректность их операндов (частично решается путем переименования регистров) и правильную последовательность занесения результатов в регистры АРФ. Одним из наиболее распространенных приемов решения этих проблем служит переупорядочивание команд. В его основе лежат использование окна команд — буферной памяти, куда помещаются все команды, прошедшие декодирование, и переименование регистров (последняя операция выполняется только с теми командами, которые записывают свой результат в регистры). Окно команд обеспечивает отсрочку передачи команд на исполнение до момента готовности операндов, а также нужную очередность завершения команд и загрузки их результатов в регистры АРФ. Эта техника известна также под названием шелвинг (shelving). Ниже рассматриваются два варианта окна команд — централизованное и распределенное.

Централизованное окно команд. Данное окно реализуется в виде так называемого табло (Scoreboard). Техника табло впервые была предложена в 1964 году фирмой Cray и реализована в ЭВМ CDC 6600.

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

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

- поля операции, где хранится дешифрированный код операции;

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

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

- поля битов достоверности.

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

Функционирование табло тесно увязано с работой буфера переименования и может быть описано следующим образом. Каждая команда после декодирования и переименования регистров заносится в очередную свободную ячейку табло. Декодированный код операции помещается в поле операции. Если команда предполагает загрузку результата в регистр, то на этот регистр имеется ссылка в БП и в поле результата заносится номер входа БП, в котором хранится последняя ссылка на данный регистр. Далее делается попытка заполнить поля операндов значениями операндов. Сначала производится поиск нужного значения в аппаратном регистровом файле. Если бит ЗД регистра операнда в АРФ установлен в 0 (значение недостоверно), это означает, что операндом является результат предыдущей операции и дальше следует искать в БП. Выполняется ассоциативный поиск ссылки на регистр в буфере переименования. При удачном исходе (в найденной ячейке БП биты ЗД и ПП установлены в единицу) требуемое значение операнда берется из буфера переименования. В любом варианте при обнаружении достоверного значения операнда поле операнда ячейки табло заполняется найденным значением, а соответствующий этому полю бит достоверности (ЗД) устанавливается в единицу. Если же значение операнда еще не вычислено, то в поле операнда ячейки табло заносится идентификатор входа буфера переименования, где находится последняя ссылка на искомый регистр, при этом бит достоверности такого поля сбрасывается в 0.

Обновление информации о готовности операндов и доступности функциональных устройств выполняется в каждом цикле процессора.

Команда может быть считана из табло и выдана на исполнение лишь после того, как будут занесены значения всех операндов, и лишь при условии, что нужный для исполнения этой команды ФБ свободен. После завершения команды в ФБ производится запись полученного результата (если эта команда предполагает данное действие) в ту ячейку буфера переименования, на которую указывает поле результата. Одновременно производится ассоциативный доступ ко всем хранящимся в табло командам и в тех из них, где в полях операндов указан идентификатор обновленного входа БП, этот идентификатор заменяется занесенным в регистр новым значением, с соответствующей коррекцией битов достоверности. Далее завершенная команда покидает табло. Удаление команды из табло является основанием для перезаписи значения результата данной команды в регистр АРФ и удаления соответствующей записи из буфера переименования.

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

В примере, приведенном на рис. 9.51, для команд I1, I2,I3 и I5 известны значения одного из операндов, и они вынуждены ожидать значения второго операнда. Команде I4 известны оба операнда, и при условии доступности ФБ, требуемого для ее исполнения, она вправе быть выдана из окна команд.

 

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

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

Распределенное окно команд. В варианте распределенного окна команд на входе каждого функционального блока размещается буфер декодированных команд, называемый накопителем команд'или схемой резервирования (reservation station). Метод резервирования был разработан Р. Л. Томасуло в 1967 году и впервые воплощен в вычислительной системе IBM 360/91. После выборки и декодирования команды распределяются по схемам резервирования тех ФБ, где команда будет исполняться. В буфере команда запоминается и по готовности выдается в связанный с данным пунктом функциональный блок. Логика работы каждого накопителя аналогична централизованному окну команд. Выдача происходит только после того, как команда получит все необходимые операнды, и при условии, что ФБ свободен. При обновлении содержимого буфера переименования файла производится доступ ко всем накопителям команд, и в них идентификаторы обновленных входов заменяются хранящимися в этих входах значениями операндов.

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

Число независимых команд, которые могут выполняться одновременно, варьируется от программы к программе, а также в пределах каждой программы. В среднем число таких команд равно 1 -3, временами возрастая до 5-6. Механизм резервирования ориентирован на одновременную выдачу нескольких команд, что, как правило, легче реализовать с распределенным, а не централизованным окном команд, поскольку темп загрузки распределенных буферов обычно меньше, чем потенциальный темп выдачи команд. Пропускная способность линии связи между централизованным окном команд и функциональными блоками должна бытъ выше, чем в случае распределенного окна. Однако для централизованного окна характерно более эффективное задействование емкости буфера.

Емкость накопителя команд в каждом функциональном блоке зависит от ожидаемого числа команд для этого блока. Типичный накопитель рассчитан на 1-3 команды. Если в одной из них одновременно готовы несколько команд, выдача их в ФБ производится в порядке занесения этих команд в накопитель.


 

А также другие работы, которые могут Вас заинтересовать

68607. Исследование генераторов постоянного тока 113 KB
  Цель работы Приобретение практических навыков работы с генератором постоянного тока ГПТ и исследование основных характеристик ГПТ. Снятие внешних характеристик ГПТ при независимом и параллельном возбуждении. Снятие регулировочных характеристик ГПТ при независимом и параллельном возбуждении.
68609. Основы электротехники и электроники: Методические указания 979.07 KB
  Объём с содержание лабораторных и практических работ определяется рабочей программой дисциплины Основы электротехники и электроники При выборе содержания и объёма лабораторных и практических работ исходят из сложностей учебного материала для усвоения из внутрипредметных и межпредметных связей...
68610. Практикум по линейной алгебре и аналитической геометрии в среде MATLAB 1.12 MB
  Цели работы. Работа с графикой: построение векторов на плоскости и в пространстве. Работа с М-файлами. Приобретение навыков решения задач векторной алгебры с помощью средств системы MATLAB. Освоение с помощью графических иллюстраций MATLAB фундаментальных понятий векторной алгебры...
68614. Експериментальне дослідження основних законів розподілу випадкових величин, що застосовуються в теорії надійності 412 KB
  Властивості випадкових величин описуються за допомогою законів розподілу під якими розуміють будьяке співвідношення що встановлює взаємозв’язок між можливими значеннями випадкової величини і відповідними їм імовірностями. Тоді функцією розподілу Fx випадкової величини X називається функція Fx = P X x.
68615. Обробка експериментальних статистичних даних про відмови елементів технічних систем. Визначення закону розподілу випадкової величини 265.5 KB
  Мета лабораторної роботи набути навиків щодо обробки експериментальних статистичних даних появи випадкової величини та визначення закону її розподілу. Основні теоретичні відомості Властивості випадкових величин описуються за допомогою законів розподілу під якими розуміють будь-яке співвідношення...