Циклы часов для инструкции invlpg - PullRequest
0 голосов
/ 14 марта 2020

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

Ответы [ 2 ]

3 голосов
/ 14 марта 2020

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

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

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

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

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

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


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

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

3 голосов
/ 14 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...