0
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 版本 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)'

架构:x86_64。

人们说从 gcc 4 开始将自动启用 sse 选项。同时,也有评论说 sse 不支持乘法和除法。

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

更何况,如果用 float 代替 double 会怎样?

我想知道等式是否是:

浮点数:2.93 * 4 双精度数:2.93 * 2

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

4

1 回答 1

2

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

operf -e FLOPS:100000

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

于 2012-09-28T04:01:21.017 回答