Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Организация ЭВМиС; Орлов С.А., Цилькер Б.Я

..pdf
Скачиваний:
435
Добавлен:
25.12.2020
Размер:
5.43 Mб
Скачать

Конвейеризация вычислений

411

 

 

Рис. 9.20. Общая схема гибридного предиктора

Рис. 9.21. Механизм выбора предиктора

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

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

412

Глава 9. Процессоры

 

 

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

По имеющимся оценкам, точность предсказания переходов с помощью гибридных стратегий в среднем составляет 97,13%, что существенно выше по сравнению с прочими вариантами.

Асимметричная схема предсказания переходов. Асимметричная схема сочетает в се­ бе черты гибридных и коррелированных схем предсказания. От гибридных схем она переняла одновременное срабатывание нескольких различных элементарных предикторов. В асимметричной схеме таких предикторов три, и каждый из них использует собственную таблицу PHT. Для доступа к таблицам, аналогично коррелированным схемам, используется как адрес команды условного перехода, так и содержимое регистра глобальной истории (рис. 9.22).

Рис. 9.22. Структура асимметричной схемы предсказания переходов

Шаблон для обращения к каждой из трех PHT формируется по-разному (применены различные функции хэширования1). При выполнении команды условного перехода каждый из трех предикторов выдвигает свое предположение, но окончательное решение принимается по мажоритарной схеме. После завершения команды условного перехода содержимое всех трех таблиц обновляется.

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

Суперконвейерные процессоры

Эффективность конвейера находится в прямой зависимости от того, с какой частотой на его вход подаются объекты обработки. Суперконвейеризация (термин

1Хеширование — преобразование входного массива данных произвольной длины в выходную битовую строку фиксированной длины таким образом, чтобы изменение входных данных приводило к непредсказуемому изменению выходных данных.

Конвейеризация вычислений

413

 

 

впервые был применен в 1988 году) позволяет улучшить производительность процессора за счет повышения частоты, с которой команды подаются на конвейер

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

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

Концепцию суперконвейеризации проиллюстрируем на примере ранее рассмотренного конвейера. На рис. 9.23 приведен стандартный конвейер из семи ступеней. Принято, что время выполнения действий на ступенях ВК, ВО и ЗР, связанных с обращением к памяти, вдвое больше, чем в прочих ступенях (длина стрелок на рисунке характеризует время выполнения операции на каждой из ступеней). Серые прямоугольники, расположенные между ступенями, представляют буферные регистры. Частоту тактирования процессора определяют «медленные» ступени (ВК, ВО и ЗР). Повысить ее можно, разделив каждую из этих ступеней на две подступени и расположив между последними буферные регистры (рис. 9.24).

Рис. 9.23. Стандартный конвейер, где быстродействие ограничено «медленными» ступенями

Рис. 9.24. Суперконвейер

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

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

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

414

Глава 9. Процессоры

 

 

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

Рис. 9.25. Длительность такта конвейера: а — в конвейере с несбалансированными ступенями; б — в суперконвейере со сбалансированными ступенями

Наряду с понятием суперконвейеризации применение нашел и другой термин — «гиперконвейеризация», который компания Intel использовала при описании процессора Pentium IV с его конвейером команд из 20 ступеней1.

К сожалению, выигрыш, достигаемый за счет суперконвейеризации, на практике может оказаться лишь умозрительным. Удлинение конвейера ведет не только к усугублению проблем, характерных для любого конвейера, но и к возникновению дополнительных сложностей. В длинном конвейере возрастает вероятность конфликтов. Дороже обходится ошибка предсказания перехода — приходится очищать большее число ступеней конвейера, на что требуется больше времени. Усложняется логика взаимодействия ступеней конвейера. Отражением этих проблем стало то, что Intel в своих разработках сначала увеличила длину конвейера до 31 ступени (ядро Prescoot), а в последующих моделях (процессор Core 2) сократила число ступеней до 14.

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

Поскольку возможности по совершенствованию элементной базы уже практически исчерпаны, дальнейшее повышение производительности ВМ лежит в плоскости

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

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

415

 

 

архитектурных решений. Один из наиболее эффективных подходов в этом плане — введение в вычислительный процесс различных уровней параллелизма. Ранее рассмотренный конвейер команд — типичный пример такого подхода. Тем же целям служат и арифметические конвейеры, где конвейеризации подвергается процесс выполнения арифметических операций. Дополнительный уровень параллелизма реализуется в векторных и матричных процессорах, но только при обработке многокомпонентных операндов типа векторов, массивов или строк. Здесь высокое быстродействие достигается за счет одновременной обработки всех компонентов вектора, массива или строки, однако подобные операнды характерны лишь для достаточно узкого круга решаемых задач. Основной объем вычислительной нагрузки обычно приходится на скалярные вычисления, то есть на обработку одиночных операндов. Для подобных вычислений дополнительный параллелизм реализуется значительно сложнее, но тем не менее возможен, и примером могут служить суперскалярные процессоры.

Суперскалярным (этот термин впервые был использован в 1987 году [40]) называется центральный процессор (ЦП), который одновременно выполняет более чем одну скалярную команду. Это достигается за счет включения в состав ЦП нескольких самостоятельных функциональных блоков, каждый из которых отвечает за свой класс операций и может присутствовать в процессоре в нескольких экземплярах. Так, в микропроцессоре Pentium III блоки целочисленной арифметики

иопераций с плавающей запятой дублированы, а в микропроцессорах Pentium 4

иAthlon — троированы.

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

На рис. 9.26 приведен пример процессора с двумя конвейерами, один из которых содержит операционное устройство для чисел с фиксированной запятой (ФЗ), а другой — для чисел с плавающей запятой (ПЗ). Сначала поясним назначение показанной на рисунке очереди команд, которая для построения суперскалярного процессора не является принципиально необходимой, но тем не менее присутствует в большинстве современных процессоров. Очередь связана с техническим приемом, известным как предвыборка команд. Суть его в том, что при каждой возможности производится считывание команд из памяти, опережающее ход вычислений, и их размещение в быстродействующем буфере предвыборки. Буфер организован по принципу очереди (FIFO), а команды в буфер поступают в порядке их выполнения в программе. Высокое быстродействие буфера и наличие в нем значительного количества команд позволяет одновременно загружать все конвейеры процессора.

416

Глава 9. Процессоры

 

 

Рис. 9.26. Суперскалярный процессор с двумя конвейерами

Вкаждом такте блок диспетчеризации извлекает из очереди и декодирует две команды. Если одна из них обрабатывает числа с ФЗ, а другая — числа с ПЗ, обе команды одновременно подаются на конвейеры (каждая на предназначенный для нее конвейер).

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

современных процессоров.

Рис. 9.27. Суперскалярный конвейер со специализированными функциональными блоками

По разным оценкам, применение суперскалярного подхода приводит к повышению производительности ВМ в пределах от 1,8 до 8 раз.

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

417

 

 

Для сравнения эффективности суперскалярного и суперконвейерного режимов на рис. 9.28 показан процесс выполнения восьми последовательных скалярных команд (без учета этапа ФАСК). Верхняя диаграмма иллюстрирует суперскалярный процессор с двумя конвейерами, а нижняя — один суперконвейер, где каждый этап реализуется двумя ступенями.

Рис. 9.28. Сравнение суперскалярного и суперконвейерного подходов

Рис. 9.29. Сравнение эффективности стандартной и совмещенной схем суперскалярных вычислений

418

Глава 9. Процессоры

 

 

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

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

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

Первая из упомянутых проблем возникает, когда очередность выдачи команд на исполнение в функциональные блоки отличается от последовательности, предписанной программой. Подобная ситуация известна как неупорядоченная выдача команд (out-of-order issue). Термин упорядоченная выдача команд (in-order issue) применяют, когда команды покидают ступени, предшествующие ступени исполнения, в порядке, предопределенном программой. В обоих случаях завершение команд обычно неупорядочено (неупорядоченное завершение команд — out-of-order completion), и это является второй проблемой. Например, в последовательности

MUL R1, R2, R3{R1 R2 × R3}

ADD R4, R5, R6 {R4 R5 + R6},

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

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

Пусть имеется последовательность команд

ADD R1, R2, R3 {R1 R2 + R3}

SUB R4, R5, R6 {R4 R5 R6}.

Зависимости между командами здесь нет, однако если в ЦП имеется только одно АЛУ, одновременное выполнение требуемых операций невозможно.

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

419

 

 

Стратегии выдачи и завершения команд

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

выбирать команды из памяти;выполнять эти команды;

позволять командам изменять содержимое регистров и ячеек памяти.

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

В самом общем виде стратегии выдачи и завершения команд можно сгруппировать в такие категории:

упорядоченная выдача и упорядоченное завершение;упорядоченная выдача и неупорядоченное завершение;

неупорядоченная выдача и неупорядоченное завершение.

Проанализируем каждый из этих вариантов на примере суперскалярного процессора с двумя конвейерами [143]. Процессор способен одновременно выбирать и декодировать две команды, причем передача обеих команд на декодирование должна также производиться одновременно. В состав процессора входят три отдельных функциональных блока (ФБ) и два устройства, обеспечивающие запись результата. В рассматриваемом примере предполагается существование следующих ограничений на выполнение программного кода из шести команд (I1I6):

I1 требует для своего выполнения двух циклов процессора;

I3 и I4 имеют конфликт за обладание одним и тем же ФБ;I5 зависит от значения, вычисляемого командой I4;

I5 и I6 конфликтуют за обладание одним и тем же ФБ.

Упорядоченная выдача и упорядоченное завершение. Наиболее простым в реализации вариантом является выдача декодированных команд на исполнение в том порядке, в котором они должны выполняться по программе (упорядоченная выдача), с сохранением той же последовательности записи результатов (упорядоченное завершение). Хотя такая стратегия и применялась в первых процессорах типа Pentium, сейчас она практически не встречается. Тем не менее ее целесообразно рассмотреть в качестве точки отсчета при сравнении различных стратегий выдачи и завершения. Согласно данному принципу, все что затрудняет завершение команды в одном конвейере, останавливает и другой конвейер, так как команды должны покидать конвейеры в порядке поступления. Пример использования подобной стратегии показан на рис. 9.30, а.

420

Глава 9. Процессоры

 

 

Рис. 9.30. Пример выполнения шести команд в соответствии со стратегиями:

а— упорядоченной выдачи и упорядоченного завершения; б — упорядоченной выдачи и неупорядоченного завершения; в — неупорядоченной выдачи

инеупорядоченного завершения

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

В рассматриваемом примере время задержки от декодирования первой команды до записи последнего результата составляет 8 тактов.

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

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

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