floatはdoubleより遅い?(1)

遅くなる根拠としては、CPUの内部ではどうせ単精度より大きな計算をしているから、丸める分だけ無駄というものです。検証内容としては単純に計算して遅かったね、というものが多いようです。

そこを敢えて踏み込んでいきます(※検証方法に指摘を頂けると有り難いです、適時修正していきます)。

テスト環境は以下のとおりです。

CPU Intel Pentium M (1.8GHz)
Memory Sumsung 1GB (DDR266-512*2)
HDD IBM RAID-0 (40*2GB)
OS Microsoft Windows XP (SP2)
Compiler Microsoft Visual C++ 2005 (VST for Developer)



上記環境に強く影響する実験である事をご承知ください。特にCPUに依存が高く、コンパイラの影響は(同じようなコードを吐く為)殆どないでしょう。


■基礎知識

C++における小数の表現方法は浮動小数です。単精度は4バイトで表現し、倍精度は8バイトで表現します(IEEE754参照)。

単純な計算速度を測るのは楽ですが、データを格納する領域を用意、(メモリ等に)格納、(CPUに)読み込み、計算、(メモリ等に)保存を含めないとフェアでは無いですよね?

そこで行程を4つに分けます。

■検証事項

0.単純な四則計算

計算時間を純粋に計測します。計算するデータや結果はCPUの1次キャッシュに収まります。

1.データサイズによる影響

領域を多数用意して、計算自体も多数行います。8バイトの領域を利用する倍精度はデータの読み書きに不利な実験になります。

2.特殊命令(SSE)の利用

速度を気にするような人に対するx86CPUの正しい使われ方でしょう。倍精度を使ったことによって計算できる回数が不利になります。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz