みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

型による演算速度の違い

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

型による演算速度の違い

投稿記事 by みけCAT » 12年前

float型は遅いという説がありますが、はたして本当でしょうか。
実際にやってみましょう。
ついでにいろいろな型の演算速度を測ってみましょう。

double_float_test.c
► スポイラーを表示
結果は

CODE:

パフォーマンスカウンタ周波数 : 14318180Hz
                  ループ回数 : 1000000000回
           空転 :   3361.054059ms(    48124177)
        int乗算 :   3802.341010ms(    54442603)
      short乗算 :   3116.149189ms(    44617585)
       char乗算 :   4657.410020ms(    66685635)
  long long乗算 :   5799.061962ms(    83032013)
     double乗算 :   9776.977800ms(   139988528)
      float乗算 :   3772.501044ms(    54015349)
long double乗算 :  11515.339240ms(   164878700)
予想的中である。実数の乗算がかなり速くなった。
やはり除算よりも乗算の方が速いようである。
また、doubleに比べてfloatがかなり高速であるということがわかる。
さらに、intよりshortが高速であるという結果になった。

最後に、この結果はCPUやコンパイラによって異なるかも知れない。
添付ファイルのプログラムで、皆様の環境でも実験していただけたら、それはとっても嬉しいなって。
添付ファイル

[拡張子 zip は無効化されているため、表示できません]


ISLe
記事: 2650
登録日時: 15年前

Re: 型による演算速度の違い

投稿記事 by ISLe » 12年前

リンク先の記事は浮動小数点数演算がCPUに統合されたばかり頃の話なので20年くらい前ですね。
当時は単精度と倍精度の切り替えに非常に時間が掛かっていたので、ちょっと気を抜くとdoubleへの暗黙の変換で途端に遅くなったものです。

いまのCPUはプロセスごとに浮動小数点数の演算モードを持っていますし切り替えにほとんど時間がかかりません。
あまりにfloatとdoubleを混ぜこぜに使うとそれでもある程度遅くなるでしょうけど。

あと、Direct3Dのデバイスを初期化すると演算モードが単精度になるという現象もあります。
#過去に一部のバージョンで起きただけかもしれませんが不明。
速度を気にするなら浮動小数点数の演算モードもチェックすべきかもしれません。

ウチもCore 2 Duoなので実行結果は同じようなもので、クロックは3.0GHzなので順当に2/3ほどの数値でした。