如何衡量浮动作业的数量?

时间:2012-09-28 03:36:52

标签: performance parallel-processing cpu sse

float res[size], a[size], b[size]
//Several initialization is done
for(int i=0; i<size; i++) res[i] = a[i]*b[i];

我想知道如何衡量浮动操作的数量。

机器: 型号名称:Intel(R)Core(TM)2 Quad CPU @ 2.93GH

编译器: 'gcc version 4.6.1(Ubuntu / Linaro 4.6.1-9ubuntu3)'

架构:x86_64。

人们说自从gcc 4开始就会自动启用sse选项。但是,有些评论表明不支持乘法和除法。

如果我只是编写上面的代码,我没有意识到是否启用了sse。任何人都可以告诉我如何计算浮动操作的数量?

更重要的是,如果将float替换为double,该怎么办?

我想知道方程是否是:

浮动:2.93 * 4 双倍:2.93 * 2

实际上,我发现x86_64中还有8个新寄存器。这会导致8次浮动操作和4次双重操作吗?

1 个答案:

答案 0 :(得分:2)

一种方法是使用cpu计数器,特别是FLOPS。例如

operf -e FLOPS:100000

请参阅http://oprofile.sourceforge.net/docs/intel-core2-events.php