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

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

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

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

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

ILP-процессоры и компиляторы обычно преобразуют полностью упо­рядоченное множество команд исходной программы в частично упорядо­ченное множество, структурированное зависимостями по данным и управ­лению. Зависимости по управлению (которые проявляются как переходы по условию) представляют главное препятствие высокопараллельному выполнению потому, что эти зависимости должны быть установлены пре­жде, чем будут выполнены все последующие команды.

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

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

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

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

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

Все виды зависимостей по данным могут быть классифицированы по типу ассоциаций: RAR - "чтение после чтения", WAR - "запись после чте­ния" и WAW - "запись после записи", RAW - "чтение после записи".

Некоторые из зависимостей по данным могут быть устранены. RAR, по сути дела, соответствует отсутствию зависимостей, поскольку в данном слу­чае порядок выполнения команд не имеет значения. Действительной зави­симостью является только "чтение после записи" (RAW), так как необходи­мо прочитать предварительно записанные новые данные, а не старые.

Лишние зависимости по данным появляются в результате "записи после чтения" (WAR) и "записи после записи" (WAW). Зависимость WAR состоит в том, что команда должна записать новое значение в ячейку памяти или регистр, из которых должно быть произведено чтение. Лишние зависимости появляют­ся по нескольким причинам: не оптимизированный программный код, ограни­чение количества регистров, стремление к экономии памяти, наличие программ­ных циклов. Важно отметить, что запись может быть произведена в любой сво­бодный ресурс, а не только тот, который указан в программе.

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

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

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

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

Ниже рассмотрены основные приемы повышения быстродействия в су­перскалярных микропроцессорах.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: