Руководство Intel Intrinsics - задержка и пропускная способность
Может кто-нибудь объяснить значения Задержки и Пропускной способности, приведенные в Интеллектуальном руководстве Intel?
Правильно ли я понял, что задержка - это количество единиц времени, необходимое для выполнения инструкции, а пропускная способность - это количество инструкций, которое можно запустить за единицу времени?
Если мое определение верно, почему задержка для некоторых инструкций выше на более новых версиях ЦП (например, mulps
)?
1 ответ
Отсутствует из этой таблицы: задержка MULPS на Бродвелле: 3. На Скайлэйке: 4.
Задержка внутреннего поиска в этом случае является точной, хотя иногда она не соответствует экспериментальным испытаниям Agner Fog. (Эта задержка VEXTRACTF128 может быть причиной Intel, не включающей задержку обхода в их таблицу). См. Мой ответ на этот связанный вопрос для получения более подробной информации о том, что делать с числами пропускной способности и задержек, и что они означают для современного процессора вне очереди.
Задержка MULPS увеличилась с 4 (Nehalem) до 5 (Sandybridge). Возможно, это было сделано для экономии энергии или транзисторов, но более вероятно, потому что SandyBridge стандартизировал время ожидания uop только к нескольким различным значениям, чтобы избежать конфликта обратной записи: т.е. когда один и тот же исполнительный модуль будет выдавать два результата в одном и том же цикле, например, при запуске 2c один цикл, затем 1с следующий цикл.
Это упрощает планировщик мопов, который отправляет мопы со Станции резервирования на исполнительные блоки. Более или менее в старом порядке, но он должен фильтровать, по каким из них готовые входные данные. Планировщик требует много энергии, и это составляет значительную часть затрат на электроэнергию при выполнении не по порядку. (К сожалению, нецелесообразно создавать планировщик, который выбирает мопы в порядке критического пути в первую очередь, чтобы избежать независимых циклов кражи мопов с критического пути с конфликтами ресурсов.)
Агнер Фог объясняет то же самое (в разделе SnB своего микроархива pdf):
Смешивание мопов с разными задержками
Предыдущие процессоры имеют конфликт с обратной записью, когда на один и тот же порт выполнения выдаются микросхемы с разными задержками, как описано на стр. 114. Эта проблема в основном решена на Sandy Bridge. Задержки выполнения стандартизированы таким образом, что все мопы с задержкой 3 выдаются на порт 1, а все мопы с задержкой 5 отправляются на порт 0. Мопы с задержкой 1 могут идти на порт 0, 1 или 5. Других задержек нет. разрешены, кроме деления и квадратного корня.
Стандартизация задержек имеет то преимущество, что избегают конфликтов обратной записи. Недостатком является то, что некоторые микропроцессоры имеют более высокие задержки, чем необходимо.
Хм, я только что понял, что числа Агнера для VEXTRACTF128 xmm, ymm, imm8
странные Агнер перечисляет его как задержку 1 моп 2 с на SnB, но Intel перечисляет его как задержку 1 с ( как обсуждалось здесь). Может быть, исполнительный блок имеет задержку 1с, но есть встроенная задержка обхода 1с (для пересечения полосы?), Прежде чем вы сможете использовать результат. Это объясняет расхождение между числами Intel и экспериментальным тестом Агнера.
Некоторые инструкции по-прежнему имеют задержку 2c, поскольку они декодируют до 2 зависимых мопов, каждая из которых имеет задержку 1c. MULPS - это одна мопа, даже версия AVX 256b, потому что даже у процессоров Intel первого поколения AVX есть полноразмерные исполнительные блоки 256b (кроме единицы split /sqrt). Необходимость в вдвое большем количестве копий схемы множителя FP является хорошей причиной для ее оптимизации с целью экономии транзисторов за счет задержки.
Эта модель распространяется вплоть до Broadwell, AFAICT из поиска таблиц Агнера. (Используя LibreOffice, я выбрал всю таблицу и выполнил data->filter->standard filter и искал строки со столбцом C = 1 и столбцом F = 4. (а затем повторил для 2.) Ищите все мопы, которые не не загружает или магазины.
Haswell придерживается схемы только задержек ALU 1, 3 и 5 циклов (за исключением AESENC/AESDEC, который составляет 1 моп для порта 5 с задержкой 7c. И, конечно, DIVPS и SQRTPS). Есть также CVTPI2PS xmm, mm
, при задержке 1 моп 4 с, но, возможно, это 3 с для p1 моп и 1 с задержки обхода, способ, которым Agner Fog измерил его, или неизбежен. VMOVMSKPS r32, ymm
также 2c (против 3c для версии r32,xmm).
Broadwell снизил задержку MULPS до 3, так же, как ADDPS, но сохранил FMA на 5c. Предположительно, они выяснили, как сократить блок FMA, чтобы получить только умножение, когда не нужно было добавлять.
Skylake способен обрабатывать мопы с задержкой = 4. Задержка для FMA, ADDPS/D и MULPS/D = 4 цикла. (SKL отбрасывает выделенный модуль добавления вектора-FP и делает все с модулем FMA. Таким образом, пропускная способность ADDPS / D удваивается, чтобы соответствовать MULPS / D и FMA...PS/D. Я не уверен, какие изменения мотивированы чем, и если бы они вообще не вводили инструкции по задержке 4c, если бы не хотели сбросить сумматор vec-FP, не нанося слишком большой вред задержке ADDPS.)
Другие инструкции SKL с задержкой 4c: 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. Это 1с на HSW. Агнер списки SKL MOVQ r64, xmm
как 2 цикла (порт 0), но MOVQ xmm, r64
как 1c (порт 5), и кажется странным, что чтение 64-битного регистра происходит быстрее, чем чтение 32-битного регистра. Агнер имел ошибки в своей таблице в прошлом; это может быть другое.