当前的 Intel CPU 上是否有整数性能计数器?

Are there Integer performance counters on current Intel CPUs?

我想测量执行稀疏矩阵-矩阵计算的代码的整数计算性能。 Intel CPU 上是否有类似于 float/double 计算的性能计数器?

更具体地说,我想计算整数加法、乘法、融合 add/mul 和比较。但任何子集都会有所帮助。

我在使用 likwid-perfctr 读取性能计数器时找不到任何此类事件。

这取决于CPU。您可以查看不同微体系结构中可用性能事件的完整列表 here。可能有整数和 floating-point 操作的事件,也可能只有整数操作的事件。例如,在 Nehalem 上,ARITH.DIVARITH.MUL 分别计算整数和 floating-point 执行的除法和乘法的数量。还有 SIMD_INT_* 性能事件仅用于计算整数 SIMD 操作。在 Skylake 上,唯一可能接近您需要的事件是 ARITH.DIVIDER_ACTIVE,它计算除法单元忙于执行整数和 floating-point 除法时的周期数。

通常,您可以搜索名称中包含 INT 或描述中包含 integer 的事件。您可以通过这种方式找到大部分事件,但不是全部。

您在使用这些事件时应该非常小心。您应该了解在启用 SMT 时它们是如何工作的,确切地计算了什么和不计算什么,以及如何处理融合 add/multiply 操作。不幸的是,文档在这方面往往含糊不清,因此您可能需要先试验一下。