为什么perf显示的浮点事件少于预期?

时间:2015-11-13 06:34:23

标签: c linux perf

我正在编写一个执行50x50矩阵乘法的C程序。

我把它编译成程序集,我发现它在最内层的循环中至少有2个浮点指令(mulsd和addsd)。循环执行了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个浮点运算。

发生了什么事?

1 个答案:

答案 0 :(得分:2)

我已经弄明白了。我误解了:mulsdaddsd实际上是SSE指令。

统计r530110(FP_COMPS_OPS_EXE:X87)不计算mulsdaddsd

我需要查看r538010(FP_COMPS_OPS:SSE_SCALAR_DOUBLE)。

我猜这个程序中<not counted>的原因是因为程序完成得太快了。当我增加矩阵的大小(因此程序运行时间更长)时,浮点事件计数正确。