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 操作が発生しますか?