Что такое механизм стека в микроархитектуре Sandybridge?

Я читаю http://www.realworldtech.com/sandy-bridge/, и я сталкиваюсь с некоторыми проблемами в понимании некоторых проблем:

Специальный указатель указателя стека также присутствует в Sandy Bridge и переименовывает указатель стека, исключая последовательные зависимости и удаление нескольких uops.

Что такое dedicated stack pointer tracker на самом деле?

Для Sandy Bridge (и P4) Intel по-прежнему использует термин ROB. Но это имеет решающее значение для понимания того, что в этом контексте оно относится только к статус-массив для полетов uops

Что это значит? Просьба пояснить.

Ответ 1

  • Как объясняет микроархор Agner Fog, механизм стека обрабатывает часть rsp+=8/rsp-=8 push/pop/call/ret на этапе выпуска конвейера (перед выпуском uops в часть Out-of-Order (OoO) ядра).

    Таким образом, часть выполнения OoO ядра должна обрабатывать часть загрузки/хранения с адресом, сгенерированным движком стека. Иногда приходится вставлять uop для синхронизации смещения от rsp при переполнении счетчика 8 бит, или когда ядро ​​OoO требуется прямое значение rsp (например, sub rsp, 8 или mov [rsp-8], eax после call, ret, push или pop обычно приводят к добавлению дополнительного урона в процессоры Intel. Процессоры AMD, по-видимому, не нуждаются в дополнительных синхронизациях).

    Обратите внимание, что таблицы инструкций Agner показывают, что Pentium-M и последующее декодирование pop reg на один uop, который выполняется только в порту загрузки. Но Pentium II/III декодирует pop eax до 2 uops; 1 ALU и 1 нагрузка, потому что нет никакого механизма стека для обработки настройки ESP вне ядра вне порядка. Помимо получения дополнительных настроек, длинная цепочка push/pop и call/ret создает последовательную зависимость от ESP, поэтому выполнение вне очереди должно пережевывать через ALU до того, как значение доступно для mov ebp, esp, или адрес для mov eax, [esp+16].


  1. Семейство микроархитов P6 (PPro to Nehalem) хранило входные значения для uop непосредственно в ROB. При выпуске/переименовании "холодные" регистровые входы считываются из файла архитектурного регистра в ROB (что может быть узким местом из-за ограниченных портов чтения. См. Стойки для чтения в регистре). После выполнения uop результат записывается в ROB для чтения других uops. Файл архитектурного регистра обновляется со значениями из ROB при выходе из системы.

    Микроархитектуры SnB-семейства (и P4) имеют файл физического регистра, поэтому ROB хранит номера регистров (т.е. уровень косвенности) вместо данных напрямую. Буфер повторного заказа по-прежнему является отличным именем для этой части процессора.

Обратите внимание, что SnB вводит AVX с векторами 256b. Сделать каждую запись ROB достаточно большой, чтобы хранить векторы двойного размера, по-видимому, нежелательно по сравнению с тем, чтобы хранить их только в меньшем файле регистра FP.

SnB упростил формат uop для экономии энергии. Это привело к жертве в микропроцессоре uop, однако: декодеры и uop-cache все еще могут сжимать память с помощью двух регистровых (индексированных) режимов адресации, но они "повторно" разминирован "перед выпуском в ядро ​​ООО.

Ответ 2

Машина стека вроде как другой порт выполнения/памяти. Как говорит Фуг:

Модификация указателя стека с помощью команд PUSH, POP, CALL и RET выполняется с помощью специального механизма стека.... Это освобождает трубопровод от нагрузки μops, которые изменяют указатель стека.

Итак, соблюдая арифметику rsp + = 8/rsp- = 8. Они обрабатываются стековой машиной, не конкурируя за ресурсы порта выполнения. Но там больше.

Столбец адресного аппаратного возврата 16 (раздел 3.4.1.4 Справочного руководства по оптимизации архитектур Intel® 64 и IA-32) - это быстрая тень адресов возврата. Он появился в Pentium M. Он также использовал обратное предсказание. Поиск Dog Microarchitecture doc для "буферного буфера возврата" для небольшого, но не намного большего.

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