Основные особенности МК. Понятие микроконтроллера. Классификация микропроцессоров. 8-разрядные МК, страница 11

Динамическое предсказание переходов достаточно часто базируется на использовании в процессоре дополнительного блока BTB (Branch Target Buffer). Основу этого блока составляет ассоциативная кэш-память, входом в которую (тэгом) является адрес команды перехода. При наличии информации об этой команде в BTB на выход выдается наиболее вероятный адрес перехода. Емкость этого буфера в современных процессорах составляет 256, 512 единиц (адресов).

Кроме ассоциативной памяти, BTB содержит блок, хранящий предысторию переходов. В первых моделях процессоров Pentium предыстория каждого перехода кодировалась двумя битами, в более поздних моделях - четырьмя, для увеличения вероятности верного предсказания. По результатам исследований блок BTB выдает верный адрес в 90% случаев.

Блок BTB появился в первой модели процессора Pentium. Он принимает участие в организации первого этапа конвейера команд (IF), совмещенного с блоком IFU, который в некоторых моделях принято называть PFU (Pre Fetch Unit). Все адреса команд, по которым осуществляется выборка из памяти,  поступают в BTB. При кэш-попадании BTB выдает адрес наиболее вероятного перехода.

Для некоторых команд (таких как безусловный переход - JMP, вызов процедуры - CALL, возврат из процедуры - RET, аппаратное прерывание -  INTn) этот адрес является безальтернативным и поэтому точным. Именно по этому адресу, выбираемому из BTB, осуществляется дальнейшая выборка и, возможно, выполнение последующих команд программы.

При отсутствии информации о команде передачи управления в BTB, эта команда переходит на стадию декодирования, на которой определяется ее принадлежность к данному классу.

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

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

Неправильное предсказание направления перехода не приводит к ошибочному выполнению программы, так как ни одна из последующих команд программы не могла еще записать результат своего выполнения, однако, неверное предсказание чревато значительными издержками на реинициализацию конвейера по правильному адресу. Эти издержки тем больше, чем больше число ступеней в конвейере. В современных процессорах число ступеней значительно превосходит 5-6 (типично для ранних моделей) и доходит до 20. Архитектура конвейера с числом ступеней, превышающим 6 (как для классического конвейера), называется суперконвейерной (superpipeline architecture) и характеризуется числом ступеней, равным  8-14. Для числа ступеней ≥ 15 – гиперконвейерная архитектура (hyperpipeline architecture).

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

Длина некоторых машинных команд (архитектура P5 – Pentium, Pentium MMX):

IMUL/MUL                        10-11 тактов

IDIV/DIV                           17-46 тактов (зависит от разрядности делителя)

FMUL                                 3 такта