小编Kon*_*nov的帖子

使用 linux perf 工具测量应用程序的 FLOP

我想用'perf'来测量一些应用程序执行的浮点和算术运算的数量,这是linux性能计数器子系统的新命令行界面命令。(出于测试目的,我使用我创建的一个简单的虚拟应用程序,见下文)。

因为我找不到为测量 FP 和整数运算定义的任何“perf”事件,我开始挖掘原始硬件事件代码(与 -rNNN 一起使用,其中 NNN 是事件代码的十六进制值)。所以我真正的问题是,我为退休指令 (INST_RETIRED) 找到的代码没有区分 FP 和其他指令(X87 和 MMX/SSE)。当我尝试对特定代码使用适当的 umask 时,我发现“perf”不知何故不理解或不支持 umask 包含。我试过:

% perf stat -e rC0 ./a.out
Run Code Online (Sandbox Code Playgroud)

这给了我退休的指示,但是

% perf stat -e rC002 ./a.out 
Run Code Online (Sandbox Code Playgroud)

这应该给我执行的 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

c linux perfmon flops

5
推荐指数
1
解决办法
5632
查看次数

标签 统计

c ×1

flops ×1

linux ×1

perfmon ×1