[英]Why does perf show less floating point events than expected?
我正在编写一个执行50x50矩阵乘法的C程序。
我将其编译为汇编,并且看到它在最内部的循环中至少有2个浮点指令(mulsd和addd)。 该循环执行了125000次,因此我期望perf stat
至少可以计数250000个浮点运算。
但是,当我运行以下命令时,
perf stat -e r530110 -e r531010 -e r532010 -e r534010 -e r538010 ./matmul
我只得到以下数
448 r530110
0 r531010
0 r532010
0 r534010
<not counted> r538010
0.001082287 seconds time elapsed
我的编译器不生成SSE指令,因此期望其他零计数。 但是,我只有448个浮点运算。
怎么了?
我知道了。 我误会了: mulsd
和addsd
实际上是SSE指令。
stat r530110
(FP_COMPS_OPS_EXE:X87)不计入mulsd
或addsd
。
我需要查看r538010
(FP_COMPS_OPS:SSE_SCALAR_DOUBLE)。
我之所以认为这些在我的程序中<not counted>
是因为该程序完成得太快。 当我增加矩阵的大小(以便程序运行更长的时间)时,浮点事件计数正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.