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

Динамическое прогнозирование условных переходов

Конфликты по управлению могут привести к существенным потерям производительности конвейера, значительно превышающим потери от рассмотренных выше конфликтов по данным. Такой конфликт может возникнуть, если выполняется команда условного перехода. Переход – это изменение последовательности выполнения команд; он может зависеть от результата предыдущей операции (например, операции сравнения). При реализации команд переходов используется специальный регистр – регистр флагов, куда заносятся указатели, или флаги, характеризующие результат любой операции. В персональных компьютерах IBM используются флаги переноса, четности, переноса из младшей тетрады в старшую, нуля, знака, переполнения, направления обработки цепочек и разрешения прерываний. Переходы встречаются в программе довольно часто. Например, в программах для персональных компьютеров команды переходов приходятся в среднем на каждые шесть-семь выполняемых команд.

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

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

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

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

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

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

Этот метод находит применение в персональных компьютерах Pentium, где данные о последних переходах хранятся в специальном буфере. Переход осуществляется по адресу, сохраненному в этом буфере.

Можно добавить информацию о переходе к каждой строке кэш-памяти команд и указывать, как следует выполнять ветвление (как выполняемое или невыполняемое). Подобный принцип нашел применение в процессорах фирмы AMD.

СчК

Прогнозируемый

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

Команда не является

командой перехода Прогноз выполнения

перехода

Команда является командой

перехода и прогнозируемый

счетчик команд используется

в качестве следующего

значения счетчика

Рисунок 5.х Использование специального буфера для организации переходов

Сопроцессирование

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

И процессор, и сопроцессор используют одну и ту же память, но ее работой управляет только основной процессор. Счетчик команд и средства определения исполнительных адресов находятся в основном процессоре, а в сопроцессоре обычно размещаются собственные регистры, дешифратор команд, и арифметико-логическое устройство. Основной процессор реализует набор команд ISM,а сопроцессор – дополнительный набор команд ISС. На рисунке 5.х показано устройство обработки, состоящее из основного и дополнительного процессоров, реализующее систему команд IS = ISM  ISС. Как сказано выше, все управление памятью сосредоточено в основном процессоре; все команды реализуются последовательно. Значительное повышение скорости работы системы достигается за счет сокращения длительности выполнения операций ISС, которые в отсутствие сопроцессора реализуются в виде подпрограмм.

Рисунок 5.х Последовательная работа процессора и сопроцессора

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

Чтобы добиться еще большего повышения быстродействия, работу основного и дополнительного процессоров совмещают во времени. Однако в этом случае организация работы усложняется. Выбранная команда вначале попадает в буфер, организованный по принципу FIFO, из которого и передается на обработку в процессор или сопроцессор. Для того чтобы такая передача состоялась, нужно чтобы соответствующий процессор оказался свободным. Команды из набора ISM передаются из буфера на исполнение в основной процессор, а команды из набора ISС – в сопроцессор. Так как длительность выполнения команд различна, то завершение последующей команды (в основном процессоре) может опережать завершение предыдущей (в сопроцессоре), т.е. может быть нарушена последовательность результатов обработки.

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

Структурные схемы процессоров Alpha и Pentium

Теперь остановимся подробнее на наиболее распространенных в нашей стране процессорах RISC и CISC архитектур. Рассмотрим упрощенные структурные схемы процессоров Alpha и Pentium, представленные на рисунках 5.х и 5.х. В них реализуется большинство описанных выше принципов, служащих для повышения быстродействия.

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

Структура этого процессора приведена на рисунке 5.х. Микропроцессор выполнен на одном кристалле и в его состав входят «устройства» целочисленной и плавающей арифметики; кроме того, в нем предусматривается кэш-память уровня L1 емкостью 32 Кбайт. Он работает на тактовой частоте 275 МГц; частота более поздних модификаций значительно выше.

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

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

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

Кэш команд

Исполнительное устройство

Управление потоком команд

Исполнительное устройство

Регистры

Регистры для чисел с ПТ

Целочисленное Устройство

устройство ПТ

Адресное устройство

Буферный регистр записи

Кэш данных