Сделай Сам Свою Работу на 5
 

Предварительная выборка команд и предсказание переходов

Основные характеристики процессоров шестого поколения.

Основная отличительная черта процессоров семейства Р6использование алгоритмов "динамического выполнения команд" (dynamic execution - выполнение команд с опережением, спекулятивное выполнение), которые построены на основе трех базовых концепций:

  1. предсказании переходов (branch prediction);
  2. динамическом анализе потока данных (dynamic data flow analysis);
  3. спекулятивном выполнении инструкций (speculative execution).

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

На вход процессора поступает поток инструкций для их последующего исполнения. Инструкции поступают в том порядке, в котором они содержатся в коде программы, исполняемой в данный момент процессором. Как только на входе процессора появляется очередная порция инструкций для исполнения, ее содержимое анализируется с целью найти точки ветвления в исполняемом потоке инструкций и предсказать наиболее вероятные пути (ветви), по которым пойдет обработка инструкций после этих точек ветвления. Поэтому Pentium имеет буфер адресов перехода, который хранит информацию о последних 256 переходах. Если некоторая команда управляет ветвлением, то в буфере запоминается эта команда, адрес перехода и предположение о том, какая ветвь программы будет выполнена следующей. Блок предсказания адреса перехода прогнозирует, какое решение будет принято программой. Инструкции, принадлежащие ветвям с наибольшей вероятностью выполнения, тут же ставятся в очередь на исполнение. Основная идея всех этих манипуляций заключается в том, чтобы заставить процессор "вне очереди" выполнить инструкции, которые принадлежат ветвям с наибольшей вероятностью выполнения. Процессор не дожидается того момента, когда очередь на выполнение дойдет до этих ветвей естественным образом, согласно логике выполняемой программы. Таким образом, обеспечивается более полная загрузка и, соответственно, более высокая производительность процессора. Конечно, такое преждевременное исполнение инструкций может оправдать себя только в том случае, если алгоритм нахождения наиболее вероятных ветвей работает достаточно хорошо. Действительно, если ветвь угадана неверно, то процессору придется исполнить инструкции, принадлежащие как неверно угаданной, так и альтернативной ветви, проделав тем самым двойную работу. Если бы такая ситуация наблюдалась часто, то использование этой методики было бы невыгодно. Вероятность правильного предсказания составляет 80%.



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

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

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

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

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

Процессор с единственным конвейером называют скалярным (все процессоры INTEL до 486 включительно). Суперскалярнымназывают процессор с несколькими конвейерами – потоками, способный обрабатывать команды параллельно. 486 – однопотоковый (один конвейер), PENTIUM является двухпотоковым, PENTIUM PRO – трехпотоковым (по 12 последовательных ступеней, т.о. в конвейере может одновременно находиться 12 команд на различных ступенях исполнения).

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

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

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

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

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

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

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

Предварительная выборка команд и предсказание переходов

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

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

Исполнение условных ветвлений состоит из следующих этапов:

• распознание команды условного ветвления;

• проверка выполнения условия перехода;

• вычисление адреса перехода;

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

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

Возможно также использование "отложенных переходов", когда одна или несколько команд после команды ветвления выполняются безусловно.

 



©2015- 2022 stydopedia.ru Все материалы защищены законодательством РФ.