Совместимость и несовместимость команд

Суперскалярная обработка

 

Введение

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

 

 

Идея и реализация

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

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

Приближённо организация команд суперскалярного процессора выглядит так:

 

Результат выполнения команд

 

Поток команд
К1
К2
…….
Кn
    Диспетчер команд
Ск
…..
С2
С1
Ск
….
С2
С1
Ск
…..
С2
С1
К111
К3
К2

 

 


1. Поток команд поступая в процессор поступает в "очередь команд" (ОК, на рисунке обозначено К1, К2 … Кn), запоминающее устройство сохраняющее множество команд, число команд хранимых в очереди n – длинна очереди команд. Заметим, что при заполнении очереди команд новыми командами современными процессорами используется уже упоминавшаяся выше (в разделе "конвейерная обработка") технология "предсказания переходов" (смотрите раздел 2).

 

2. Диспетчер команд (ДК) – электронное логическое устройство, просматривающее всю очередь команд и отправляющее на выполнение те команды из очереди, которые могут быть выполнены параллельно. Совсем не обязательно команды посылаются на выполнение строго в том порядке, в каком они следуют в программе. Обычно ДК поддерживают так называемое "переупорядочивание потока команд" (или "внеочередное исполнение"), реализация которого предполагает что на выполнение может быть послана любая команда из очереди, если только она готова к выполнению.

 

3. Команды отобранные для выполнения диспетчер команд направляет на "исполнительные конвейеры", то же самое что и конвеер в конвейерном процессоре, только теперь в они представлены в большем количестве, уже не одним а несколькими параллельно работающими конвейерами. И теперь уже на выходе конвейеров мы имеем в одном такте результат выполнение не одной, а сразу нескольких команд. Число команд, которые одновременно в одном такте ДК могут быть отправлены на выполнение, называют "степенью суперскалярности" суперскалярного процессора. "Степень суперскалярности" определяет теоретический предел архитектурной производительности IPC. Достигнутая на начало 21 века степень суперскалярности процессоров составляет около 5-6 команд (исключение здесь являются только так называемые VLIW процессоры, процессоры особой разновидности, особой архитектуры, для которых неприменимо многое из того, что говорилось выше, и речь о которых тоже пойдёт, но позднее).

 

 

Совместимость и несовместимость команд.

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

 

 

Известно следующие основные причины несовместимости команд:

1. "Несовместимость по ресурсу". Несовместимы поскольку требуют участия в процессе выполнения одного и того же ресурса предоставляемого ЭВМ (частным случаем несовместимости по ресурсу является несовместимость по регистру, это когда команды используют один и тот же регистр процессора).

2. "Несовместимость по результату": Несовместимы поскольку одна из команд использует результат выполнения другой.

 

 

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

 

Несовместимость по результату частично преодолевается (более или менее успешно для разных программ) использованием уже упомянутой выше "технологии переупорядочивания потока команд" (или, называя иначе "внеочередного исполнения", "внеочередного запуска"). Здесь заметим: чем больше используемая процессором "длинна очереди команд" тем больше вероятность того, что в очереди команд будут найдены совместимые команды, что могут быть запущены параллельно.