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次双重操作吗?
答案 0 :(得分:2)
一种方法是使用cpu计数器,特别是FLOPS
。例如
operf -e FLOPS:100000
请参阅http://oprofile.sourceforge.net/docs/intel-core2-events.php