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

1.3.4.Конфликт по управлению

Возникают при конвейеризации команд переходов, которые изменяют значение программного счетчика. Эти конфликты так же приводят к приостановке выполнения команд. Обычно в простейших конвейерах, если приостанавливается какая-либо команда, то все следующие за ней команды так же приостанавливаются и прекращается загрузка конвейера [л 3, л 4, л 6].

При безусловном переходе (рис.23а) на вход конвейера загружаются последовательно команды, начиная с адреса . После выборки команды безусловного перехода (БП) с адресом  + 5 следующей командой на входе конвейера будет команда, выбранная по адресу  + 6. На самом деле переход должен быть к команде, которая находится в ОЗУ в ячейке . Это означает, что все команды в конвейере после команды БП не должны исполнятся. Загрузка конвейера должна быть продолжена, начиная с команды, указанной в адресе перехода. В результате появляется «пузырь».

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

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

Способы уменьшения конфликтов по управлению

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

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

а) б)

Рис.23

Задержанные переходы

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

Буферы предвыборки

Конвейер команд дополняется двумя буферными ЗУ, типа FIFO (память типа «очередь»), которые встраиваются между первой ступенью конвейера, обеспечивающей выборку команды из памяти, и второй ступенью (рис.22). Основной буфер (FIFO1) предназначен для приема команд в естественной последовательности; дополнительный (FIFO2) – для приема команд начиная с адреса перехода. Блок анализа перехода (БАП) выявляет в основном буфере команду УП или БП, определяет адрес перехода и направление перехода. После определения направления перехода на вход второй ступени конвейера БАП подключает основной или дополнительный буфер.

Рис.24

Рассмотрим работу конвейера для программы, в которой по адресу  + 5 записана команда УП (рис.23б).

Первая ступень выбирает из памяти команду УП и передает ее на вход основного буфера (рис.23), который условно можно интерпретировать как ступени конвейера. В такте 2 в команде  + 5 БАП определяет, что команда УП. В такте 3 БАП определяет адрес перехода. В такте 4 на входе дополнительного буфера записывается команда . К 5-му такту в основном и дополнительном буферах будут записаны команды по обоим направлениям перехода. В 5-м такте БАП определят по значению флага направление перехода и передает на вторую ступень конвейера команду либо из FIFO1, либо из FIFO2.

Т

ступ.

1

2

3

4

5

1 ст.

a+5

a+6

a+7

a+8

a+9

1

a+5

a+6

a+7

a+8

2

a+5

a+6

a+7

3

a+5

a+6

1

a

2 ст.

a+5

a

Рис.25

Буфер целевых адресов переходов.

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

Левая колонка предназначена для адресов команд переходов; средняя – для адресов переходов; в правой колонке записываются биты прогнозирования выполнения перехода.

Перед выполнением программы осуществляется ее прогон с целью выявления команд переходов. Адреса этих команд заносятся в левую колонку буфера. В среднюю колонку в ту же строку записывается из данной команды адрес перехода. В правой колонке записывается «0» или «1», которые прогнозируют выполнение или невыполнение перехода. Обычно поведение переходов в командах УП достаточно стабильно и смещено в одну сторону [л…], то есть переход либо выполняемый, либо невыполняемый.

Рис. 26

Для уяснения работы буфера рассмотрим следующий фрагмент программы (Рис. 27).

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

При прогоне программы выявлены:

команда УП:

адрес команды: α + 4;

адрес перехода: α;

команда БП:

адрес команды: β;

адрес перехода: γ;

В процессе реализации программы на СЧАК формируется адрес следующей команды, которая должна быть выбрана из памяти и загружена на вход конвейера. Предположим что это команда УП. На программном счетчике зафиксирован адрес этой команды: α + 4. поскольку задачей команды является переход либо к следующей команде программы, либо по адресу перехода, то буфер целевых адресов еще до выборки команды по ее адресу определяет что это команда перехода. Если бит прогнозирования равен «1», адрес команды, загружаемой на вход конвейера будет: α. В противном случае следующая команда выбирается из памяти по адресу, записанному на СЧАК. Для команды БП (ее адрес: β) бит вероятности всегда равен «1», поэтому следующая за БП команда будет загружена в конвейер из памяти по адресу: γ.

Компаратор формирует один из двух сигналов:

- если содержимое СЧАК не совпало ни с одним из адресов в левой колонке;

- если на программном счетчике находится адрес команды перехода.

Переход по продвинутому адресу возможен по сигналу разрешения: (рис.26).

Переход по адресу перехода выполняется по сигналу: , где:- бит прогнозирования перехода.

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