2016-10-23 3 views
10

Может ли кто-нибудь объяснить значения задержки и пропускной способности, указанные в Intel Intrinsic Guide?Руководство Intel Intrinsics - Задержка и пропускная способность

Я правильно понял, что время ожидания - это количество единиц времени, которое требуется выполнить команде, а пропускная способность - это количество команд, которые могут быть запущены за единицу времени?

Если мое определение верное, то почему латентность для некоторых инструкций выше на более новых версиях ЦП (например, mulps)?

+1

Хм, нет, эти тайминги времени, по-видимому, включают в себя доступ к L1 по какой-то странной причине. Который увеличился от 2 до 3 циклов. Вместо этого вместо этого вы можете использовать таблицы «agner туман». –

+1

@HansPassant: нет, таймеры Intel точно соответствуют таблицам Agner Fog в этом случае. Почему, по-вашему, они включают в себя латентность загрузки L1? –

+0

На этой веб-странице есть объяснение значений задержки и пропускной способности https://software.intel.com/en-us/articles/measuring-instruction-latency-and-throughput – Harald

ответ

8

Отсутствующие из этой таблицы: MULPS задержка на Бродуэлла: 3. Skylake: задержка 4.

Характеристической находку точна в этом случае, хотя it occasionally doesn't match Agner Fog's experimental testing. (Эта задержка VEXTRACTF128 может быть случай Intel, не включающей байпасную задержку в их таблице). См. my answer on that linked question для получения более подробной информации о том, что делать с номерами пропускной способности и задержки, а также то, что они означают для современного процессора вне порядка.

MULPS латентность увеличилась с 4 (Nehalem) до 5 (Sandybridge). Возможно, это было для экономии энергии или транзисторов, но, скорее всего, потому, что SandyBridge стандартизовал затухания uop только для нескольких разных значений, чтобы избежать конфликта обратной записи: то есть, когда один и тот же исполнительный блок выдаст два результата в одном цикле, например. от запуска 2c uop на один цикл, затем 1c на следующий цикл.

Это упрощает планировщик uop, который отправляет uops из станции резервирования в исполнительные блоки. Более или менее в старейшем первом порядке, но у него есть фильтр, с помощью которого у них есть готовый вход. Планировщик энергопотреблен, и это значительная часть энергозатрат исполнения вне порядка. (Это, к сожалению, не практично, чтобы сделать планировщик, который выбирает микрооперации в критическом пути первого порядка, чтобы избежать having independent uops steal cycles from the critical path with resource conflicts.)

Agner Fog explains the same thing (in the SnB section of his microarch pdf):

Mixing μops with different latencies

Предыдущих процессоры имеют обратную запись конфликт когда μops с разные задержки выдаются на тот же порт выполнения, что и , описанный на стр. 114. Эта проблема в значительной степени решена на мосту Sandy . Задержки выполнения стандартизированы так, что все пики с задержка 3 выдаются порту 1, а все микросхемы с латентностью 5 идут в порт 0. Микросхемы с задержкой 1 могут перейти в порт 0, 1 или 5. Нет возможны другие задержки , за исключением разделения и квадратного корня.

Стандартизация задержек имеет то преимущество, что конфликты обратной записи исключаются. Недостатком является то, что некоторые микросхемы имеют более высокие задержки, чем это необходимо.

Хм, я просто понял, что цифры Агнера для VEXTRACTF128 xmm, ymm, imm8 странны. Agner перечисляет его как 1 uop 2c latency на SnB, но Intel перечисляет его как 1c latency (as discussed here). Возможно, исполнительный блок имеет задержку 1 с, но есть встроенная задержка байпаса 1 с (для пересечения полосы?), Прежде чем вы сможете использовать результат. Это объясняет несоответствие между числами Intel и экспериментальным тестом Agner.


Некоторые инструкции еще 2с задержки, поскольку они декодируются в 2 зависимых микрооперации, каждый из которых 1c задержки. MULPS - это единственная версия, даже версия AVX 256b, потому что даже процессоры Intel первого поколения AVX имеют полноразмерные 256-битные исполнительные модули (кроме блока divide/sqrt). Необходимость в два раза больше копий схемы мультипликатора FP является хорошей причиной для оптимизации ее для экономии транзисторов за счет латентности.


Эта модель вмещает до и включая Бродуэллу, AFAICT от поиска таблиц Agner в. (Используя LibreOffice, я выбрал всю таблицу и сделал стандартный фильтр data-> filter->, и посмотрел строки со столбцом C = 1 и столбец F = 4. (И затем повторите для 2.) Ищите любые uops, которые aren

Haswell придерживается шаблона только 1, 3 и 5 циклов ALU uop latencies (за исключением AESENC/AESDEC, который равен 1 мкр для порта 5 с задержкой 7 с и, конечно же, DIVPS и SQRTPS) . Также есть CVTPI2PS xmm, mm с задержкой 1 uop 4c, но, возможно, это 3c для p1 uop и 1c байпасной задержки, способ измерения Agner Fog или неизбежный. VMOVMSKPS r32, ymm также 2c (против 3c для версии r32, xmm).

Бродвелл снизил время ожидания MULPS до 3, то же, что и ADDPS, но сохранил FMA при 5c. Предположительно, они выяснили, как сократить t он блок FMA для создания только умножения, когда не было необходимости добавления.


Skylake способен обрабатывать микрооперации с латентностью = 4. Задержка для FMA, ADDPS/D и MULPS/D = 4 цикла. (SKL сбрасывает выделенный блок вектор-FP и делает все с блоком FMA. Таким образом, пропускная способность ADDPS/D удваивается, чтобы соответствовать MULPS/D и FMA ... PS/D. Я не уверен, какое изменение мотивировало то, и вне зависимости от того, представили ли они 4c-латентные инструкции вообще, если бы они не захотели сбросить сумматор vec-FP, не слишком сильно ухудшая латентность ADDPS.)

Другие инструкции SKL с задержкой 4 c: PHMINPOSUW (с 5c) AESDEC/AESENC, CVTDQ2PS (от 3c, но это может быть 3c + байпас), RCPPS (от 5c), RSQRTPS, CMPPS/D (от 3c). Хм, я думаю, что сравнение FP было сделано в сумматоре, и теперь нужно использовать FMA.

MOVD r32, xmm и MOVD xmm, r32 указаны как 2c, возможно, байпасная задержка от int-vec до int? Или сбой в тестировании Агнера? Для проверки латентности потребуются другие инструкции для создания обратного хода назад к xmm. Это 1c на HSW. Agner перечисляет SKL MOVQ r64, xmm как 2 цикла (port0), но MOVQ xmm, r64 как 1c (port5), и кажется чрезвычайно странным, что чтение 64-битного регистра происходит быстрее, чем чтение 32-битного регистра. У Агнера были ошибки в его столе в прошлом; это может быть другое.

Смежные вопросы