2010-12-02 139 views
4

我想测量一些应用程序执行的浮点数和算术运算的数量,使用'perf'这个新的命令行接口命令到linux性能计数器子系统。 (为了测试目的,我使用了我创建的一个简单的虚拟应用程序,请参阅下文)。因为我找不到任何为测量FP和整数操作而定义的'perf'事件,我开始挖掘原始硬件事件代码(用于-rNNN,其中NNN是事件代码的十六进制值)。所以我真正的问题是,我发现的退役指令代码(INST_RETIRED)没有区分FP和其他指令(X87和MMX/SSE)。当我试图使用适当的umasks到特定的代码时,我发现不知何故'perf'不理解或支持umask包含。我试着用:使用linux perf工具测量应用程序的FLOP

% perf stat -e rC0 ./a.out 

这给了我退休的说明,但

% perf stat -e rC002 ./a.out 

应该给我执行的指令X87我说不对供给参数。也许是这样,但是使用'perf'来使用原始硬件事件的umasks的正确方法是什么?一般来说,如何获得使用perf工具执行的程序的确切数量的浮点和整数操作?

非常感谢, 康斯坦丁Boyanov


这里是我的测试程序:

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; 
    } 
} 
+0

你的CPU是什么? – osgx 2010-12-02 13:10:48

回答

4

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

2

我不知道PERF,但oprofile中有许多处理器浮点事件。可能会有一些重叠,因为INST_RETIRED也是一个有效的oprofile事件。

相关问题