Как устроены микрооперации в очереди декодирования инструкций (IDQ)? - PullRequest
3 голосов
/ 23 мая 2019

Что-то, что мне было интересно некоторое время, но, во-первых, одно из предположений состоит в том, что все микропроцессоры, созданные макрооперацией, могут иметь такой же rip, что и макрооперация (я почти уверен, чтоIQ будет иметь rip для каждого блока IFETCH, и декодеры могут легко преобразовать rip + смещение макрооперации для rip макрооперации на основе информации о длине).IDQ составляет 8 строк по 32 байта для каждого логического ядра в SnB (может быть 64 байта в последних микроархитектурах, но я не уверен), что вызывает вопрос о формате мопов в IDQ - есть ли адресдля каждой строки IDQ и инструкция jmp запускает новую строку, аналогично μop cache ;где, как я понял из стр. 47 руководства по оптимизации, 32-байтовая выровненная область может охватывать 3 пути, но последний путь должен заканчиваться предположительно jmp, чтобы он мог заново инициировать выборкудля следующего окна инструкций путем направления конвейера по этому адресу (который также может вернуться в кэш-память или может запустить устаревший конвейер декодирования).Это позволило бы легко перемещать пути кеша µop в IDQ, если бы IDQ имел одинаковую структуру (поэтому я чувствую, что IDQ может иметь один адрес в начале каждой строки, а не по инструкции, поскольку это не такнеобходимо, если инструкции в строке имеют смежные rip s, а инструкция после перехода, возврата и т. д. будет в новой строке).Это также позволило бы LSD блокировать и обнаруживать циклы более эффективно, поскольку ему нужно было бы только сканировать 8 адресов в начале строк, чтобы проверить, совпадает ли он, например, с адресом jmp.Но опять же, я не уверен, как именно реализован ЛСД;Источники, кажется, фиксируют значение 28 мкс как максимальную петлю, которую можно обнаружить.

Существует также сложность механизма стека и того, как он размещает свои операции синхронизации;чтение раздела тумана Агнера в microarchitecture.pdf в Stack Engine показывает, что μop синхронизации вставляется перед mov или add, что требует синхронизации rsp, поэтому потребуетсяrip этой инструкции в случае, если перед исходным mov или add стоит ret (так что его можно сравнить с rsp для проверки прогноза RSB на любом порту, обрабатывающем ret, BEU?(*)).Я бы также предположил, что Stack Engine работает вместе с декодерами, чтобы он вставлялся одновременно с декодерами, чтобы впоследствии не пришлось сдвигаться вдоль инструкций для его вставки.Также необходимо иметь битовую индикацию в операторе синхронизации, чтобы информировать распределитель о необходимости дисконтировать его байты при вычислении rip s относительно адреса в начале строки при выдаче их в ROB.Он также может начать новую строку для инструкции после операции синхронизации, но это, возможно, кажется дорогим.

Что-то, что останавливает эту логику в тупике, - это просто то, что rip инструкции не может быть получено изсмещение байта μop в строке от адреса в начале строки, поскольку длина макроопераций не совпадает с длиной μop.Эту проблему можно решить, если каждая строка IDQ соответствует одному макрооператору (с любыми операциями синхронизации, добавленными в конец строки, например mov + synchop в одной строке и ret, который я упоминал ранее, в строкетопографически ниже, с rip в начале каждой строки), что, я думаю, расточительно.Единственная альтернатива, о которой я могу подумать, - это пометить адреса в строке для каждой макрооперации, которая кажется грязной.

У кого-нибудь есть что-то, чтобы добавить или исправить, как это может быть реализовано?

(*)Это связано с вопросом о том, как обрабатываются ошибочные прогнозы ветвления, например, когда команда RS с предсказанным-принятым ветвлением назначается RS, один из параметров может быть rip записи ROB команды после того, как она может BEU направить трубопровод по неверному прогнозу. Когда выделяется ret, один из параметров должен быть записью ROB для uop после него, а другой параметр - rsp, чтобы его можно было сравнить с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...