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

 

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

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

 

 

Рис. 55. Архитектура суперскалярного процессора.

 

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

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

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

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

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

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

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

 

Рис. 56. Суперскалярный процессор с двумя конвейерами.

 

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

 

Рис. 57. Суперскалярный конвейер со специализированными исполнительными блоками.

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

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

 

Рис. 58. Сравнение суперскалярного и суперконвейерного подхода.

 

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

 

Рис. 59. Сравнение эффективности стандартной суперскалярной и совмещённой схем суперскалярных вычислений.