Что такое движок стека в микроархитектуре Sandybridge?
Я читаю http://www.realworldtech.com/sandy-bridge/ и сталкиваюсь с некоторыми проблемами в понимании некоторых вопросов:
Выделенный трекер указателя стека также присутствует в Sandy Bridge и переименовывает указатель стека, устраняя последовательные зависимости и удаляя ряд мопов.
Что такое dedicated stack pointer tracker
на самом деле?
Для Sandy Bridge (и P4) Intel все еще использует термин ROB. Но важно понимать, что в этом контексте он ссылается только на массив статусов для мопов в полете.
Что это значит на самом деле? Пожалуйста, сделайте это ясно.
2 ответа
Как объясняет документооборот от Agner Fog, механизм стека обрабатывает
rsp+=8
/rsp-=8
часть push/pop / call/ret на этапе выпуска конвейера (перед выпуском мопов в часть ядра Out-of-Order (OoO)).Таким образом, исполняющая часть ядра OoO должна обрабатывать только часть загрузки / сохранения с адресом, генерируемым механизмом стека. Иногда приходится вставлять моп, чтобы синхронизировать его смещение от
rsp
когда 8-битный счетчик смещений переполняется, или когда ядру OoO требуется значениеrsp
напрямую (например,sub rsp, 8
, или жеmov [rsp-8], eax
послеcall
,ret
,push
или жеpop
как правило, вызывает дополнительный UOP для вставки в процессоры Intel. Процессоры AMD, очевидно, не нуждаются в дополнительной синхронизации).Обратите внимание, что таблицы инструкций Агнера показывают, что Pentium-M и более поздние декодируют
pop reg
на один моп, который работает только на порт загрузки. Но Pentium II/III декодируетpop eax
до 2 мопс; 1 ALU и 1 нагрузка, потому что нет стекового движка для обработки ESP вне ядра, вышедшего из строя. Помимо выполнения дополнительных мопов, длинная цепочка push / pop и call / ret создает последовательную зависимость от ESP, поэтому выполнение в неупорядоченном порядке должно пройти по мопам ALU, прежде чем значение станет доступным дляmov ebp, esp
или адрес дляmov eax, [esp+16]
,
Семейство микроархивов P6 (от PPro до Nehalem) сохраняло входные значения для uop непосредственно в ROB. При выпуске / переименовании "холодные" входные регистры считываются из файла архитектурного регистра в ROB (что может быть узким местом из-за ограниченных портов чтения. См. Регистры чтения-чтения). После выполнения мопа результат записывается в ROB для последующего прочтения. Файл архитектурного регистра обновляется значениями из ROB, когда мопы удаляются.
Микроархитектуры семейства SnB (и P4) имеют физический регистровый файл, поэтому ROB хранит номера регистров (т. Е. Уровень косвенности) вместо данных напрямую. Re-Order Buffer - все еще отличное название для этой части процессора.
Обратите внимание, что SnB представил AVX с 256b векторами. Делать каждую запись ROB достаточно большой для хранения векторов двойного размера было, по-видимому, нежелательно по сравнению с тем, чтобы хранить их только в меньшем регистровом файле FP.
SnB упростил формат UOP для экономии энергии. Это, однако, привело к потере возможности микроплавления uop: декодеры и кеш uop могут по-прежнему использовать микроплавкие операнды памяти, используя режимы адресации с двумя регистрами (индексированные), но они "не ламинированы" перед выдачей в OOO. ядро
Машина стека похожа на другой порт исполнения / памяти. Как говорит Фог:
Изменение указателя стека с помощью команд PUSH, POP, CALL и RET выполняется специальным механизмом стека.... Это освобождает конвейер от нагрузки мопов, которые модифицируют указатель стека.
Так что это заботится об арифметике rsp+=8 / rsp-=8. Они обрабатываются стековой машиной, не конкурируя за ресурсы порта выполнения. Но это еще не все.
Стек глубоких аппаратных обратных адресов (раздел 3.4.1.4 Справочного руководства по оптимизации архитектур Intel® 64 и IA-32) представляет собой быструю тень от обратных адресов. Это обнаружилось в Pentium M. Это также использовало предсказание возвращения. Поищите в документации по микроархитектуре Fog "буфер возврата стека", но не намного.
Итак, теперь у вас есть несколько хороших HW для уменьшения конкуренции за порт выполнения для стековой арифметики и быстрых значений адреса возврата кеша. Вы можете усложнить жизнь стековой машине, пытаясь перехитрить ее. По сути, всегда сопоставляйте звонки / звонки, толчки и треск. Тогда ты в порядке.