intel Vtune 的整数加减法事件计数在哪里?
Posted
技术标签:
【中文标题】intel Vtune 的整数加减法事件计数在哪里?【英文标题】:Where is integer addition and subtraction event count from intel Vtune? 【发布时间】:2016-05-03 17:11:58 【问题描述】:我正在使用英特尔 VTune 来分析我的程序。
我使用的 CPU 是 IVY Bridge。
所有硬件指令事件都可以在这里找到:
https://software.intel.com/en-us/node/589933
FP_COMP_OPS_EXE.X87 执行的 FP 计算 Uop 数 循环。 FADD、FSUB、FCOM、FMUL、整数 MUL 和 IMUL 的数量, FDIV、FPREM、FSQRTS、整数 DIV 和 IDIV。本次活动不 区分在先验流中间使用的 FADD 和 s
FP_COMP_OPS_EXE.X87 似乎包含整数乘法和整数除法;但是,那里没有整数加法和整数减法。我在上面的网站上也找不到这两种指令。
谁能告诉我计算整数加法和整数减法指令的事件是什么?
【问题讨论】:
没有单独的计数器。如果您只想要add
/ sub
指令的动态计数,而不是像 cmp
、and
、xor
这样便宜的指令,请查看 binary instrumentation。 add
是任何普通 CPU 上最便宜的双输入指令之一。在 IvB 上,在任何 ALU 端口上运行:1c 延迟,每 0.333c 吞吐量一个。只有mov reg,reg
或归零指令更便宜。请参阅x86 tag wiki。
【参考方案1】:
我读了很多关于你的问题,但这里是:
如果您的代码受计算限制,您可能会找到方法来推断整数加法和减法的重要性,而无需直接测量它们。例如,UOPS_RETIRED.ALL - FP_COMP_OPS_EXE.ALL
会给你一个非常粗略的估计,假设你已经做了一些事情来确定你的代码是计算绑定的。
有吗?如果没有,从 VTune 的基本分析开始,然后消除内存、缓存和前端瓶颈可能会有所帮助。如果您已经这样做了,那么您还有更多选择:
交叉引用UOPS_DISPATCHED_PORT
与 Ivy Bridge 框图,或者更好的是,列出哪些特定类型的算术可以在哪些端口上执行(我找不到)。
修改您的程序源代码、编译器标志或程序集,重新运行粗粒度配置文件(如基本分析),并查看您是否看到像 INST_RETIRED.ANY / CPU_CLK_UNHALTED
这样的度量级别的影响。
抱歉,似乎没有更直接的答案。
【讨论】:
Agner Fog 测试了哪些指令可以使用哪些端口,并发布了instruction tables。add
、sub
、xor
和许多其他最简单的整数指令可以在任何 CPU 的每个 ALU 端口上运行。这就是使这个问题成为一个愚蠢问题的原因:add
和sub
并不特别,并且与几乎所有其他事物一样竞争相同的执行资源。 (与在有限端口上运行的 FP add 和 mul 不同)。
谢谢,这正是我想要的。应该考虑与阿格纳核实。我同意这样的怀疑,即这个问题比 OP 可能真正想问的更具体,以便解决我能想到的大多数现实世界用例,这将导致这条道路,但我正在尽我所能慈善地阅读它。我不肯定它是“愚蠢的”。不过你可能是对的。
是的,这是您在优化标量循环时可能想知道的事情,该循环执行了一些整数相加,或者想要测量add
作为指针增量循环开销的一部分。不过,OP 当然没有提出任何可以解释这种奇怪请求的方案。 (这是另一件事:add
是循环开销的正常部分,但计算 fadd
只计算“工作”)。无论如何,您的“不要那样做,而是这样做”的答案是更有用的建议,实际上是用二进制仪器或其他东西计算 add
insns。以上是关于intel Vtune 的整数加减法事件计数在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 DPDK 上重现 Intel Vtune 分析示例的结果
在 intel-vtune 中,被调用函数的有效总时间高于调用函数的总时间