Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по ВС.doc
Скачиваний:
228
Добавлен:
22.03.2016
Размер:
1.1 Mб
Скачать

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

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

В зависимости от количества используемых конвейеров современные суперскалярные процессоры бывают двух- и четырехпотоковыми. Эти названия происходят от числа «потоков» одновременно обрабатываемых команд. На рисунке 5.х показана структурная схема наиболее простого классического двухпотокового суперскалярного процессора. Команды из кэш-памяти команд поступают в буферные регистры, откуда передаются на ступень декодирования кода операции. Дальнейшее выполнение команды происходит на конвейере, который момент декодирования кода операции оказался свободным. [В современных процессорах, предназначенных для персональных компьютеров, эти конвейеры обычно неравноценны, поэтому команда для дальнейшего выполнения передается на тот конвейер, который способен ее выполнить.]

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

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

Кэш-память команд

Интерфейс

Буферные регистры выборки

Кэш-память данных

Блок регистров

Декодирование

Выборка операнда

Выборка операнда

Исполнение

Исполнение

Запись результата

Запись результата

Рисунок 5.х Двухпотоковый суперскалярный процессор

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

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

Часто задержки происходят из-за недостаточности аппаратных ресурсов. Например, в компьютере может быть предусмотрен только один порт записи в регистры, а при определенных обстоятельствах конвейеру может потребоваться выполнить две записи в регистровый файл одновременно. Это приводит к конфликту, в результате которого происходит приостановка выполнения команд в одном из конвейеров до тех пор, пока требуемое устройство (один из портов) не станет доступным. Подобную ситуацию называют конвейерным «пузырем» – он проходит по конвейеру, не вызывая никакой обработки, но занимает место в конвейере, а следовательно, снижается производительность обработки.

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

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