我想使用“perf”来测量某个应用程序执行的浮点和算术操作数量,这是 Linux 性能计数子系统的新命令行接口。 (为了测试目的,我使用了一个简单的虚拟应用程序,如下所示)。
由于我找不到任何用于测量浮点和整数操作的“perf”事件,因此我开始深入研究原始硬件事件代码(用于-rNNN,其中NNN是事件代码的十六进制值)。 所以我的真正问题是,我找到的退休指令代码(INST_RETIRED)没有区分FP和其他指令(X87和MMX / SSE)。 当我尝试对特定代码使用适当的umasks时,我发现“perf”不理解或支持umask包含。 我尝试过:
% perf stat -e rC0 ./a.out
这使我感到退役的指示,但是
% perf stat -e rC002 ./a.out
当我提供错误的参数时,应该给我执行的X87指令说。也许是这样,但使用与“perf”一起使用原始硬件事件的掩码的正确方法是什么?总的来说,使用perf工具获取程序执行的浮点和整数操作的确切数量的方法是什么?
非常感谢, Konstantin Boyanov
这是我的测试应用程序:
int main(void){
float numbers[1000];
float res1;
double doubles[1000];
double res2;
int i,j=3,k=42;
for(i=0;i<1000;i++){
numbers[i] = (i+k)*j;
doubles[i] = (i+j)*k;
res1 = numbers[i]/(float)k;
res2 = doubles[i]/(float)j;
}
}