Где находится число событий сложения и вычитания целых чисел в Intel Vtune?

Я использую Intel VTune для профилирования моей программы.

Я использую процессор IVY Bridge.

Все события аппаратной инструкции можно найти здесь:

https://software.intel.com/en-us/node/589933

FP_COMP_OPS_EXE.X87 Количество вычислительных операций FP, выполненных в этом цикле. Количество FADD, FSUB, FCOM, FMUL, целочисленных MUL и IMUL, FDIV, FPREM, FSQRTS, целочисленных DIV и IDIV. Это событие не отличает FADD, используемый в середине трансцендентного потока, от s

FP_COMP_OPS_EXE.X87, кажется, включает целочисленное умножение и целочисленное деление; однако там нет целочисленного сложения и целочисленного вычитания. Я не могу найти эти два вида инструкций на указанном выше веб-сайте.

Может ли кто-нибудь сказать мне, что это за событие, которое подсчитывает инструкции по сложению и вычитанию целых чисел?


person Yun Li    schedule 03.05.2016    source источник
comment
Для них нет отдельного счетчика. Если вам нужен динамический подсчет только add / sub инструкций, а не одинаково дешевых, таких как cmp, and, xor, загляните в бинарный инструментарий. add — одна из самых дешевых инструкций с двумя входами на любом обычном процессоре. На IvB работает на любом порту ALU: задержка 1c, пропускная способность один на 0,333c. Дешевле только mov reg,reg или инструкция по обнулению. См. вики тегов x86.   -  person Peter Cordes    schedule 04.05.2016


Ответы (1)


Я много читаю в вашем вопросе, но вот:

Вполне возможно, что если ваш код связан с вычислениями, вы могли бы найти способы сделать вывод о значимости целочисленных добавлений и подписок без их непосредственного измерения. Например, UOPS_RETIRED.ALL - FP_COMP_OPS_EXE.ALL даст вам очень приблизительную оценку добавлений и подписок, предполагая, что вы уже сделали что-то, чтобы установить, что ваш код привязан к вычислениям.

У вас есть? Если нет, может помочь начать с базового анализа VTune, а затем устранить узкие места памяти, кэша и внешнего интерфейса. Если вы уже сделали это, у вас есть еще несколько вариантов:

  • Сопоставьте UOPS_DISPATCHED_PORT с блок-схемой Ivy Bridge или, что еще лучше, со списком конкретных типов арифметики, которые могут выполняться на каких портах (чего я не могу найти).
  • Измените исходный код программы, флаги компилятора или сборку, повторно запустите более подробный профиль, такой как базовый анализ, и посмотрите, заметите ли вы влияние на уровне показателя, такого как INST_RETIRED.ANY / CPU_CLK_UNHALTED.

Извините, кажется, нет более прямого ответа.

person Aaron Altman    schedule 01.08.2016
comment
Компания Agner Fog проверила, какие инструкции могут использовать какие порты, и опубликовала таблицы инструкций. add, sub, xor и многие другие простейшие целочисленные инструкции могут выполняться на каждом порту ALU в любом ЦП. Вот что делает этот вопрос глупым: add и sub не являются чем-то особенным и конкурируют за те же ресурсы выполнения, что и почти все остальное. (В отличие от FP add и mul, которые работают на ограниченных портах). - person Peter Cordes; 01.08.2016
comment
Спасибо, это именно то, что я искал. Надо было подумать, проверить у Агнера. Я согласен с подозрением, что этот вопрос более конкретен, чем ОП, вероятно, действительно хотел бы задать, чтобы рассмотреть большинство реальных вариантов использования, которые, как я мог подумать, могут привести к этому пути, но я делаю все возможное, чтобы прочтите его снисходительно. Я не уверен, что это глупо. Хотя ты можешь быть прав. - person Aaron Altman; 01.08.2016
comment
Это правда, это то, что может вас удивить при оптимизации скалярного цикла, который выполнял некоторые целочисленные сложения или хотел измерить add как часть накладных расходов цикла для приращений указателя. Однако ОП, конечно же, не предлагал никакого сценария, который объяснял бы такой странный запрос. (Это другая вещь: add является нормальной частью служебной информации цикла, но подсчет fadd учитывает только работу). В любом случае, не делайте этого, вместо этого сделайте это. Ответ - более полезный совет, чем фактический подсчет add insns с помощью двоичных инструментов или чего-то еще. - person Peter Cordes; 01.08.2016