Узкое место при использовании режимов индексированной адресации - PullRequest
2 голосов
/ 06 августа 2020

Я провел следующие эксперименты на машинах Haswell и Coffee Lake.

Инструкция

cmp rbx, qword ptr [r14+rax]

имеет пропускную способность 0,5 (т.е. 2 инструкции на цикл). Это как и ожидалось. Команда декодируется в один микропроцессор, который позже не ламинируется (см. { ссылка }) и, таким образом, требует двух выходных слотов.

Если мы добавим nop инструкцию

cmp rbx, qword ptr [r14+rax]; nop

Я ожидаю, что пропускная способность составит 0,75, поскольку для этой последовательности требуется 3 слота для вывода из эксплуатации, и, похоже, нет других узких мест в серверной части. Это также пропускная способность, о которой сообщает IACA. Однако фактическая пропускная способность равна 1 (это не зависит от того, исходят ли микропрограммы от декодеров или от DSB). Каково узкое место в этом случае?

Без режима индексированной адресации

cmp rbx, qword ptr [r14]; nop

имеет пропускную способность 0,5, как и ожидалось.

1 Ответ

2 голосов
/ 06 августа 2020

Похоже, вы обнаружили обратную сторону неразглаживания по сравнению с обычными инструкциями с несколькими мупами, возможно, во взаимодействии с 4-мерной проблемой / переименованием / выделением, когда микроплавленный муп достигает головы IDQ.

Гипотеза: возможно, оба мопа, возникшие в результате расслоения, должны быть частью одной и той же группы задач, поэтому unlaminated; nop повторяется только обеспечивает пропускную способность внешнего интерфейса в 3 мупа слияния домена за такт.

Это может иметь смысл, если расслоение происходит только в начале IDQ, когда они достигают стадии выделения / переименования. Скорее, чем они добавлены в IDQ. Чтобы протестировать это , мы могли бы увидеть, зависит ли емкость LSD (l oop buffer) на Haswell от количества uop до или после разрушения. (Или на Coffee Lake, если у него снова включен LSD. Мне пришлось бы загрузить старый микрокод на моем Skylake, чтобы проверить это.)

Для сравнения, cmp dword [rip+rel32], 1 не будет микроплавких предохранителей в декодерах, поэтому он не будет отслаиваться. Если он достигнет пропускной способности 0,75 c, это будет свидетельством в пользу того, что для устранения ламинирования требуется место в той же группе задач.

Возможно, times 2 nop; unlaminate или times 3 nop также могут быть интересным тестом, чтобы увидеть, есть ли неламинированный uop когда-либо выдает сам по себе или может надежно захватить еще 2 NOP после того, как он задерживается с любой позиции в группе задач. Судя по вашему параллельному тесту cmp -unlaminate, я полагаю, что мы все еще увидим в основном полные группы проблем с 4 мупами.

В вашем вопросе упоминается выход на пенсию, но не проблема.

Ширина выхода на пенсию не меньше, чем у проблемы (4 ширины от Core2 до Skylake, 5 ширины в Ice Lake).

Sandybridge / Haswell исключить 4 мупа с объединенными доменами / такт. Skylake может выводить из эксплуатации 4 микропроцессора с объединенными доменами за такт на гиперпоток , что позволяет быстрее высвобождать ресурсы, такие как буферы нагрузки, после того, как один старый остановленный uop наконец завершит работу, если оба логических ядра заняты. Не на 100% ясно, может ли он отключать 8 / такт при работе в однопоточном режиме, я обнаружил противоречивые утверждения и нет четкого заявления в руководстве по оптимизации Intel.

На самом деле очень сложно, если не невозможно, создать узкое место при выходе на пенсию (но не проблема). Любой устойчивый поток должен пройти стадию выпуска, которая не шире выхода на пенсию. (Счетчики производительности для uops_issued.any показывают, что расслоение происходит в какой-то момент перед выпуском, так что это не помогает нам протолкнуть больше мопов через интерфейс, чем может обработать вывод на пенсию. Если это не вводит в заблуждение; выполнение того же l oop на обоих логических ядрах одного и того же физического ядра должно быть одно и то же общее узкое место, но если Skylake будет работать быстрее, это скажет нам, что параллельный вывод SMT из эксплуатации помог. Маловероятно, но кое-что, что нужно проверить, если кто-то хочет исключить это.)

Это также пропускная способность, о которой сообщает IACA.

Модель конвейера IACA кажется довольно наивной; Я не думаю, что он знает об эффекте проблемы Sandybridge, состоящей из 4 единиц (например, 6 мкоп l oop стоит столько же, сколько 8). IACA также не знает, что Haswell может сохранять add eax, [rdi+rdx] микроплавленых элементов на протяжении всего конвейера, поэтому любой анализ проиндексированных мопов, которые не отслаиваются, неверен.

Я бы не стал доверять IACA. больше, чем просто подсчет мопов и несколько безумных предположений о том, как они будут распределяться по портам.

...