加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 00:44:36 所属栏目:Linux 来源:网络整理
导读:我想测量某些应用程序使用’perf’执行的浮点数和算术运算,这是对 linux性能计数器子系统的新命令行接口命令. (出于测试目的,我使用了一个我创建的简单虚拟应用程序,见下文). 因为我找不到为测量FP和整数运算定义的任何’perf’事件,所以我开始挖掘原始硬件
我想测量某些应用程序使用’perf’执行的浮点数和算术运算,这是对 linux性能计数器子系统的新命令行接口命令. (出于测试目的,我使用了一个我创建的简单虚拟应用程序,见下文).

因为我找不到为测量FP和整数运算定义的任何’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’原始硬件事件的umasks的正确方法是什么?一般来说,使用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;
  }
}

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读