Какой тип адресов может хранить порт 7 для обработки AGU на последних версиях Intel x86? - PullRequest
0 голосов
/ 28 мая 2018

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

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

1 Ответ

0 голосов
/ 28 мая 2018

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


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

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 (Агнер Туман прав).
  • На Skylake: VCVTPS2PH xmm 2 слиты / 3 неиспользованных мопа: p01 p4 p237
  • На Skylake: VCVTPS2PH ymm3 слияния / 3 неиспользованных мопа: p01 p4 p237

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

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

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

...