我想测量一些应用程序使用“perf”执行的浮点和算术运算的数量,这是 linux 性能计数器子系统的新命令行接口命令。(出于测试目的,我使用了我创建的一个简单的虚拟应用程序,见下文)。
因为我找不到为测量 FP 和整数运算定义的任何“性能”事件,所以我开始挖掘原始硬件事件代码(与 -rNNN 一起使用,其中 NNN 是事件代码的十六进制值)。所以我真正的问题是,我为退役指令(INST_RETIRED)找到的代码没有区分 FP 和其他指令(X87 和 MMX/SSE)。当我尝试对特定代码使用适当的 umask 时,我发现“perf”不知何故不理解或不支持 umask 包含。我试过:
% perf stat -e rC0 ./a.out
这给了我退休的指示,但是
% perf stat -e rC002 ./a.out
这应该给我执行的 X87 指令说我提供了错误的参数。也许是这样,但是将原始硬件事件的 umask 与“perf”一起使用的正确方法是什么?一般来说,获得使用 perf 工具执行的程序的浮点和整数运算的确切数量的方法是什么?
非常感谢,康斯坦丁·博亚诺夫
这是我的测试应用程序:
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;
}
}