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 指令的动态计数,而不是像 cmpandxor 这样便宜的指令,请查看 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。 addsubxor 和许多其他最简单的整数指令可以在任何 CPU 的每个 ALU 端口上运行。这就是使这个问题成为一个愚蠢问题的原因:addsub 并不特别,并且与几乎所有其他事物一样竞争相同的执行资源。 (与在有限端口上运行的 FP add 和 mul 不同)。 谢谢,这正是我想要的。应该考虑与阿格纳核实。我同意这样的怀疑,即这个问题比 OP 可能真正想问的更具体,以便解决我能想到的大多数现实世界用例,这将导致这条道路,但我正在尽我所能慈善地阅读它。我不肯定它是“愚蠢的”。不过你可能是对的。 是的,这是您在优化标量循环时可能想知道的事情,该循环执行了一些整数相加,或者想要测量add 作为指针增量循环开销的一部分。不过,OP 当然没有提出任何可以解释这种奇怪请求的方案。 (这是另一件事:add 是循环开销的正常部分,但计算 fadd 只计算“工作”)。无论如何,您的“不要那样做,而是这样做”的答案是更有用的建议,实际上是用二进制仪器或其他东西计算 add insns。

以上是关于intel Vtune 的整数加减法事件计数在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 DPDK 上重现 Intel Vtune 分析示例的结果

在 intel-vtune 中,被调用函数的有效总时间高于调用函数的总时间

Intel Vtune:无法访问电源驱动程序

Linux 上 fortran 代码的 Intel Vtune 奇怪行为

Intel C++编译器和VTune的免费版本

适用于 Mac 的 Intel VTune Profiler 错误:无法与目标通信