Kon*_*nov 5 c linux perfmon flops
我想用'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)
小智 6
要使用的事件取决于处理器。您可以使用 libpfm4 (http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi) 来确定哪些是可用事件(使用 showevinfo 程序),然后从同一发行版中 check_events 找出原始事件的代码。我的 Sandy Bridge CPU 支持 FP_COMP_OPS_EXE 事件,我凭经验发现它与 FLOP 计数非常接近。
| 归档时间: |
|
| 查看次数: |
5632 次 |
| 最近记录: |