Является ли CLMUL постоянным временем? - PullRequest
0 голосов
/ 21 ноября 2018

Выполняется ли инструкция умножения без переноса в постоянное время?Иначе говоря, время, необходимое для выполнения, не зависит от его аргументов?

1 Ответ

0 голосов
/ 21 ноября 2018

Согласно https://agner.org/optimize/ и PCLMULQDQ имеет фиксированную задержку на любом данном процессоре.(http://www.uops.info/table.html не перечисляет задержку для этого, но имеет хороший материал для большинства инструкций).

Нет причин ожидать, что это будет зависеть от данных - как правило, только у подразделения / sqrt есть данныепроизводительность в современных высокопроизводительных процессорах.Обычное умножение этого не делает: вместо этого они просто делают его быстрым для общего случая с большим количеством аппаратного параллелизма внутри исполнительного блока.

Планирование инструкций вне порядка намного проще, когда мопы имеют фиксированную задержку, итак же строятся для них полностью конвейерные исполнительные узлы.Планировщик (станция резервирования) может избежать одновременного завершения двух операций на одном и том же порту и создать конфликт обратной записи.Или, что еще хуже, в том же исполнительном блоке и вызывает остановку внутри него.Вот почему фиксированная задержка очень распространена.

(Микрокодированный многопользовательский моп pclmulqdq с разветвлением может иметь переменную задержку или более вероятную задержку, которая зависит от непосредственного операнда: возможно, дополнительный случайный переход илидва, когда немедленное значение не равно нулю. Таким образом, фиксированная задержка одного аргумента uop не обязательно применяется к микрокодированной инструкции, но pclmuqdq все еще достаточно прост, чтобы вы не ожидали, что она будет на самом деле внутренне переходитьrep movsb должен.)


Как указывает @fuz, PCLMUL был создан для криптографии, поэтому производительность, зависящая от данных, сделает его уязвимым для временных атак. Итакесть очень веская причина, чтобы сделать PCLMUL постоянным временем.(Или, в худшем случае, зависит от непосредственного, но не от источника регистров / памяти. Например, немедленное значение, отличное от 0, может потребовать дополнительных сдвиговых сдвигов для получения верхних половин источников, подаваемых на единицу переноса-умножения 64x64 => 128.)


Числа из таблиц Агнера Фога

На Intel с Бродвелла pclmuludq равен 1 моп.На Skylake это 7 циклов задержки, 1 на тактовую пропускную способность.(Таким образом, вам нужно сохранить 7 независимых операций PCLMUL в полете, чтобы насытить исполнительный блок на порту 5).Broadwell имеет 5 циклов задержки.С операндом источника памяти это 1 дополнительный моп.

В Haswell это 3 моп (2p0 p5) с задержкой 7 циклов и пропускной способностью 1 на 2 такта.

На Sandybridge / IvyBridge это 18моп, задержка 14c, одна на 8 тактовых частот.

На Westmere (2nd Gen Nehalem) это задержка 12c, одна на 8c пропускной способности.(Неизвестное количество мопов, ни у Agner Fog, ни у uops.info его нет. Но мы можем с уверенностью предположить, что оно микрокодировано.) Это было первое поколение, которое поддержало инструкцию - одно из очень немногих отличий от Нехалема до Вестмера.


На Ryzen это 4 моп, задержка 4c, одна на 2 такта.http://instlatx64.atw.hu/ показывает задержку 4,5 цикла.Я не уверен, в чем разница между их тестированием и тестированием Агнера.

На Piledriver это 5 моп, задержка 12 с, пропускная способность по одному на 7 тактов.


На Jaguar это 1 моп, Задержка 3c, пропускная способность по одному на 1 такт!

В Silvermont - 8 моп, задержка 10c / пропускная способность.Goldmont = 3 моп, 6c lat / 3c tput.


См. Также Какие соображения относятся к прогнозированию задержки для операций на современных суперскалярных процессорах и как их вычислить вручную? и руководство по оптимизации Agner Fog, позволяющее понять, как задержка и пропускная способность (и узкие места внешнего интерфейса) влияют на производительность ЦП не в порядке, в зависимости от окружающего кода.

...