5

我想测量一些应用程序使用“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;
  }
}
4

2 回答 2

6

要使用的事件取决于处理器。您可以使用 libpfm4 (http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi) 来确定哪些是可用事件(使用 showevinfo 程序),然后从同一个发行版中 check_events 找出原始的事件的代码。我的 Sandy Bridge CPU 支持 FP_COMP_OPS_EXE 事件,我凭经验发现它与 FLOP 计数密切相关。

于 2012-09-09T20:44:27.427 回答
2

我不确定性能,但 oprofile 有许多处理器的浮点事件。可能有一些重叠,因为 INST_RETIRED 也是一个有效的 oprofile 事件。

于 2010-12-02T16:22:33.060 回答