2016-05-03 12 views
1

Я использую intel VTune для профилирования моей программы.Где целое число слияния и вычитания из intel Vtune?

Процессор, который я использую, - это мост IVY.

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

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

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

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

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

+1

Для них нет отдельного счетчика. Если вы хотите динамическое количество инструкций 'add' /' sub' и не менее дешевых, таких как 'cmp',' and', 'xor', посмотрите на [binary instrumentation] (http://stackoverflow.com/ вопросы/36650210/как к профилю-заместитель чИСЛО-дополнения-mutltiplications-и т.д.-с-VTune/36658984 # 36658984). 'add' является одной из самых дешевых двухпозиционных инструкций для любого обычного процессора. На IvB работает на любом порту ALU: 1 с задержка, по одной на 0,333с пропускную способность. Только «mov reg, reg» или команда обнуления дешевле. См. [X86 tag wiki] (http://stackoverflow.com/tags/x86/info). –

ответ

1

Я читал много в ваш вопрос, но здесь идет:

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

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

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

Извините, по вашему мнению, более прямой ответ отсутствует.

+1

Agner Fog проверил, какие инструкции могут использовать какие порты, а также опубликованные [таблицы инструкций] (http://agner.org/optimize/). 'add',' sub', 'xor' и многие другие из простейших целых инструкций могут выполняться на каждом порту ALU в любом CPU. Вот что делает этот глупый вопрос: 'add' и' sub' не являются особыми и конкурируют за те же ресурсы выполнения, что и почти все остальное. (В отличие от FP add и mul, которые работают на ограниченных портах). –

+0

Спасибо, это именно то, что я искал. Должно было подумать, чтобы проверить с Агнером. Я согласен с подозрением, что этот вопрос более конкретный, чем OP, вероятно, действительно захочет спросить, чтобы обратиться к большинству случаев использования в реальном мире, о которых я мог думать, что приведет к этому пути, но я делаю свой Лучше всего читать это мило. Я не уверен, что это «глупо». Вы можете быть правы, хотя. –

+1

Это правда, это то, о чем вы могли бы подумать, оптимизируя скалярный цикл, который сделал некоторое целое число, или хотел бы измерить 'add' как часть накладных расходов цикла для приращений указателя. Тем не менее, ОП не предлагал никаких сценариев, которые могли бы объяснить такой странный запрос. (Это другое: 'add' - нормальная часть накладных расходов цикла, но подсчет' fadd' учитывает только «работу»). Во всяком случае, ваши «не делайте этого, сделайте это вместо этого» ответ - это более полезный совет, который фактически подсчитывает «add» insns с помощью двоичной аппаратуры или что-то в этом роде. –