Какие типы адресов может хранить порт 7 для обработки AGU на последних версиях Intel x86?

Начиная с Haswell, микроархитектуры ЦП Intel имеют выделенный модуль хранения адресов на порту 7, который может обрабатывать создание адресов для некоторых операций хранилища (другое - данные хранилища всегда идут на порт 4).

Первоначально считалось, что это может обрабатывать адреса любого типа, но, похоже, это не так. Какие типы адресов может обрабатывать этот порт?

1 ответ

Решение

Этот ответ относится к Haswell и Skylake (/Kaby Lake / Coffee Lake). Будущие ISA (Cannon Lake / Ice Lake) должны быть проверены, когда они будут доступны. Порт 7 AGU был новым в Haswell.


Для инструкций, которые могут использовать порт7 вообще (например, не vextracti128), любой неиндексированный режим адресации может использовать порт 7.

Это включает RIP-относительный и 64-битный абсолютный (mov [qword abs buf], eax, даже в исполняемом файле PIE, загруженном выше 2^32, поэтому адрес действительно не помещается в 32 бита), а также в обычном режиме. [reg + disp0/8/32] или абсолют [disp32],

Индексный регистр всегда предотвращает использование порта 7, например [rdi + rax], или же [disp32 + rax*2], Четное [NOSPLIT disp32 + rax*1] не может использовать порт 7 (поэтому HSW/SKL не выполняет внутреннее преобразование индексированного со шкалой =1 и без базового регистра в режим адресации base+disp32.)

Я проверил себя с ocperf.py stat -etask-clock,context-switches,cpu-migrations,page-faults,cycles,instructions,uops_dispatched_port.port_2,uops_dispatched_port.port_3,uops_dispatched_port.port_7 ./testloop на Skylake i7-6700k.


[+0, +2047] Диапазон перемещений для магазинов не отличается: mov [rsi - 4000], rax можно использовать порт 7.

Неиндексированные нагрузки с небольшими положительными смещениями имеют на 1с меньшую задержку. Никаких особых случаев для магазинов не упоминается в руководстве по оптимизации Intel. Пересылка хранилища с переменной задержкой в ​​Skylake (с худшей задержкой, когда нагрузка пытается выполнить сразу после хранилища) затрудняет создание микробенчмарка, который включает задержку хранилища, но не зависит от того, что мопы адреса магазина конкурируют с нагрузками за меньшее количество порты. Я не придумал микробенчмарк с цепочкой зависимостей, перенесенных в цикле, через uop-store-address, но не через uop-data-store. Предположительно это возможно, но, возможно, нужен массив вместо одного места.


Некоторые инструкции не могут использовать порт 7 вообще:

vextracti128 [rdi], ymm0, 0 включает в себя uop с адресом магазина (конечно), но он может работать только на порте 2 или 3.

В таблицах инструкций Агнера Фога есть хотя бы одна ошибка: он перечисляет pextrb/w/d/q как только запустив uop store-address на p23, но на самом деле он может использовать любой из p237 на HSW/SKL.


Я не проверял это полностью, но одно различие между HSW и SKL, которое я нашел1, было VCVTPS2PH [mem], xmm/ymm, imm8, (Инструкция изменилась, чтобы использовать меньшее количество ALU-мопов, так что это не указывает на изменение в p7 между HSW и SKL).

  • На Haswell: VCVTPS2PH 4 моп (слитый и неиспользованный домен): p1 p4 p5 p23 (Агнер Фог прав).
  • На Скайлэйке: VCVTPS2PH xmm 2 слиты / 3 неиспользованных мопа: p01 p4 p237
  • На Скайлэйке: VCVTPS2PH ymm 3 слиты / 3 неиспользованных мопа: p01 p4 p237

    (Агнер Туманные списки VCVTPS2PH v как 3F/3U (одна запись для обеих векторных ширин), пропуская микро-слияние с версией xmm, и неправильно отображает разбивку портов как p01 p4 p23).

В общем, остерегайтесь того, что последние обновления Агнера кажутся немного небрежными, например, ошибки копирования / вставки или опечатки (например, 5 вместо 0,5 для Райзена vbroadcastf128 y,m128 пропускная способность).

1: тестирование HSW проводилось на старом ноутбуке, который больше не использовался (я использовал его оперативную память для обновления другой машины, которая все еще регулярно используется). У меня нет Бродвелла, чтобы проверить. Все в этом ответе определенно верно для Skylake: я только что проверил это прямо сейчас. Некоторое время назад я проверил кое-что из этого на Haswell, и у меня все еще были мои записи об этом.

Другие вопросы по тегам