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 つの float 操作と 4 つの double 操作が発生しますか?

4

1 に答える 1

2

1つの方法は、特にCPUカウンターを使用することFLOPSです。例えば

operf -e FLOPS:100000

http://oprofile.sourceforge.net/docs/intel-core2-events.phpを参照してください

于 2012-09-28T04:01:21.017 に答える