Циклы часов для инструкции invlpg

Я читал документацию об invlpg инструкции для процессоров Intel Pentium, и там сказано, что занимает 25 тактов. Я думал, что это зависит от реализации (конкретного процессора), а не от реальной архитектуры набора команд? Или тот факт, что для выполнения этой инструкции должно потребоваться 25 тактов, также является частью спецификации набора команд?


person Kevin Tan    schedule 14.03.2020    source источник


Ответы (2)


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

person David Schwartz    schedule 14.03.2020

Этот номер не является частью какой-либо официальной документации ISA, это просто данные о производительности, которые кто-то добавил в старую (на тот момент текущую) копию документации Intel ISA.

Это какая-то случайная микроархитектура, предположительно P5 Pentium, которая была актуальна еще в то время, когда Tripod был широко используемым веб-хостом, и которое руководство называет документирующим. (В наши дни существуют процессоры Pentium / Celeron, которые представляют собой просто урезанные версии i3 / i5 / i7 того же поколения, с отключенными такими вещами, как AVX и BMI1 / 2. Но Pentium раньше ссылался на Микроархитектура P5.)

Это не из документации Intel; он был добавлен тем, кто скомпилировал этот HTML. Форматирование аналогично современным версиям справочного руководства по набору инструкций Intel x86 SDM, том 2. Вы можете найти HTML-фрагменты этого на https://github.com/HJLebbink/asm-dude/wiki/INVLPG и https://www.felixcloutier.com/x86/invlpg например. Таблица кодирования / мнемоники / описания вверху имеет идентичное форматирование в вашей ссылке на штатив, но фактический текст несколько отличается. Кроме того, текст для inc (текущий Intel vs. tripod) дословно идентичен.

Итак, да, это основано на старом PDF-> HTML руководства Intel vol.2, с добавленными циклами P5 и информацией о парных инструкциях (inc пары в канале U или V для этого двойного вопроса упорядоченный конвейер, который не разбивает инструкции на упс). Также с обновлением FLAGS раздел превратился в таблицы.

Эта информация о соединении инструкций и количестве циклов совершенно не имеет значения при настройке на современные микроархитектуры, такие как Skylake и Zen, но вы можете найти ее в Таблицы инструкций Агнера Фога: в его электронной таблице есть таблица для P5, а также для более поздних микроархитектур Intel, AMD и Via. (Также см. Его руководство по оптимизации и microarch pdf для справочной информации, которая поможет вам разобраться в информации uops / ports / latency / throughput.) Агнер не тестирует большинство инструкций ядра, поэтому invlpg нет в его списке.

http://faydoc.tripod.com/cpu/index.htm явно не официальный источник Intel. IDK, откуда автор получил информацию. Может они сами себя проверяли. Или Intel иногда публиковала временные показатели для некоторых микроархитектур, например как часть их руководства по оптимизации. Это полностью отделено от руководств по x86 ISA, и вы не можете полагаться на их правильность. И другие люди опубликовали результаты своих тестов.


Еще один хороший источник результатов экспериментального тестирования производительности инструкций (для каких портов, задержки и пропускной способности) - https://uops.info/. Их тестирование на _3 _ показывает, что на практике он имеет пропускную способность ~ 194 цикла на Skylake-client, ~ 157 на Nehalem и ~ 126,25 на Zen + и Zen2, если взять несколько случайных примеров. Но он может лучше чередоваться с другими инструкциями, занимая "только" 47 интерфейсных операций на последних процессорах Intel и, таким образом, может выдавать менее 12 циклов, если на внутреннем интерфейсе есть место в ROB / RS, возможно, позволяя более поздним инструкциям выполняться, в то время как invlpg операция выполняется. (Хотя, если для вывода мопов на пенсию требуется более 100 циклов, это часто останавливает выполнение OoO в какой-то момент на долю от общего времени.)

Помните, что производительность инструкций не может быть охарактеризована одним числом на вышедших из строя ЦП; это не одномерное. Анализ производительности не так прост, как сложение затрат цикла для всех инструкций в цикле, вы должны проанализировать, как они могут перекрываться друг с другом. Или для сложных случаев, таких как invlpg, измерьте.

person Peter Cordes    schedule 14.03.2020