Конфликты в конвейере команд
Конфликтные ситуации в конвейере принято обозначать термином риск(hazard), а обусловлены они могут быть тремя причинами:
· Попыткой нескольких команд одновременно обратиться к одному и тому же ресурсу ВМ(структурный риск);
· Взаимосвязью команд по данным(риск по данным);
· Неоднозначностью при выборке следующей команды в случае команд перехода(риск по управлению);
Наиболее частый вид конфликтов по данным – ЧПЗ, поскольку операция чтения в цикле команды предшествует операции записи. ПО той же причине конфликты типа ЗПЧ большой проблемы не представляют.
В борьбе с конфликтами по данным выделяют два аспекта: своевременное обнаружение потенциального конфликта и его устранение. Признаком возникновения конфликта по данным между двумя командами i и j служит невыполнение хотя бы одного из трех условий Бернстейна:
Для борьбы с конфликтами по данным применяются как программные, так и аппаратные методы. Программные методы ориентированы на устранение самой возможности конфликтов еще на стадии компиляции программы. Фактическое разрешение конфликтов возлагается на аппаратные методы. Наиболее очевидным решением является остановка команды; на несколько тактов с тем, чтобы команда I успела завершиться или, по крайней мере, миновать ступень конвейера, вызвавшую конфликт.
Наибольшие проблемы при создании эффективного конвейера обусловлены командами, изменяющими естественный порядок вычислений. Так приостановки конвейера при выполнении команд перехода обусловлены двумя факторами. Первый фактор характерен для любой команды перехода и связан с выборкой команды из точки перехода. Вторая причина нарушения ритмичности работы конвейера имеет отношение только к командам условного перехода, поэтому основные усилия проектировщиков ВМ направлены на решение проблемы условных переходов, поскольку именно они приводят к наибольшим издержкам в работе конвейера. Для устранения или частичного сокращения этих издержек предложены различные способы, которые условно можно разделить на четыре группы:
· Буфер предвыборки;
· Множественные потоки;
· Задержанный переход;
· Предсказание перехода
Чтобы добиться ритмичности подачи команд на вход конвейера, между ступенью выборки команды и остальной частью конвейере часто размещают буферную память, организованную по принципу очереди и называемую буфером предвыборки.
Стратегия задержанного перехода предполагает продолжение выполнения команд, следующих за командой УП, вне зависимости от ее исхода. Естественно, что это имеет смысл, лишь когда последующие команды являются «полезными», то есть такими, которые все равно должны быть когда-то выполнены, независимо от того, происходит переход или нет.
Предсказание переходов на сегодняшний день рассматривается как один из наиболее эффективных способов борьбы с конфликтами по управлению. Идея заключается в том, что еще до момента выполнения команды условного перехода или сразу же после ее поступления на конвейер делается предположение о наиболее вероятном исходе такой команды. Последующие команды подаются на конвейер в соответствии с предсказанием.
Суперскалярные процессоры
Суперскалярным называется центральный процессор (ЦП), который одновременно выполняет более чем одну скалярную команду. Это достигается за счет включения в состав ЦП нескольких самостоятельных функциональных (исполнительных) блоков, каждый из которых отвечает за свой класс операций и может присутствовать в процессоре в нескольких экземплярах. Так, в микропроцессоре Pentium III блоки целочислен-рах Pentium 4 и Athlon — троированы. Структура типичного суперскалярного процессора включает в себя шесть блоков: выборки команд, декодирования команд, диспетчеризации команд, распределения команд по функциональным блокам, блок исполнения и блок обновления состояния.
Блок выборки команд извлекает команды из основной памяти через кэш-память команд. Этот блок хранит несколько значений счетчика команд и обрабатывает команды условного перехода.
Блок декодирования расшифровывает код операции, содержащийся в извлеченных из кэш-памяти командах.
Блоки диспетчеризации и распределения взаимодействуют между собой и в совокупности играют в суперскалярном процессоре роль контроллера трафика. Оба блока хранят очереди декодированных команд. Очередь блока распределения часто рассредоточивается по несколько самостоятельным буферам — накопителям команд или схемам резервирования (reservation station), — предназначенным для хранения команд, которые уже декодированы, но еще не выполнены. Каждый накопитель команд связан со своим функциональным блоком (ФБ), поэтому число накопителей обычно равно числу ФБ, но если в процессоре используется несколько однотипных ФБ, то им придается общий накопитель. По отношению к блоку диспетчеризации накопители команд выступают в роли виртуальных функциональных устройств.
Блок исполнения состоит из набора функциональных блоков. Примерами ФБ могут служить целочисленные операционные блоки, блоки умножения и сложения с плавающей запятой, блок доступа к памяти. Когда исполнение команды завершается, ее результат записывается и анализируется блоком обновления состояния, который обеспечивает учет полученного результата теми командами в очередях распределения, где этот результат выступает в качестве одного из операндов.
Суперскалярность предполагает параллельную работу максимального числа исполнительных блоков, что возможно лишь при одновременном выполнении нескольких скалярных команд. Последнее условие хорошо сочетается с конвейерной обработкой, при этом желательно, чтобы в суперскалярном процессоре было несколько конвейеров, например два или три.
На последнем рисунке показан наиболее интегрированный подход к построению суперскалярного конвейера. Здесь блок выборки (ВК) извлекает из памяти более одной команды и передает их через ступени декодирования команды и вычисления адресов операндов в блок выборки операндов (ВО). Когда операнды становятся доступными, команды распределяются по соответствующим исполнительным блокам. Обратим внимание, что операции «Чтение», «Запись» и «Переход» реализуются самостоятельными исполнительными блоками. Подобная форма суперскалярного процессора используется в микропроцессорах Pentium II и Pentium III фирмы Intel, а форма с тремя конвейерами - в микропроцессоре Athlon фирмы AMD.
По разным оценкам, применение суперскалярного подхода приводит к повышению производительности ВМ в пределах от 1,8 до 8 раз.