« エラーレポートに WMI から取得した情報を含める | メイン | TMPGEnc 再質問回答 »
2008年02月02日
日常の備忘録:: 小手先の最適化は遅くなる?
Tweet @jin1016をフォローまず、以下のようなコードがあったとする。
float CalculateGradients( FloatImage& H, FloatImage& G, int k ) for( int y = 0; y < height; y++ ) { float gx = ( H[y][w] - H[y][e] ) / divider; G[y][x] = sqrt( gx * gx + gy * gy ); |
このコードを見ると、ループ内に判定があって、その判定が一番端でしか成立しないのは見てすぐにわかる。
ループ内に判定があると遅いので、この判定を外に出して最適化を試みようとしてしまったりする。
が、それは止めた方が良い。
VC2005で外に出したものとそうでないもので速度を計測したところ、外に出したほうが 10%ほど遅かった。
最近の最適化はかなり賢いようだ。
小手先の最適化はかえって遅くなってしまうかもしれない。
今回計ってみてそのことに気付いた。
私は、こういうコードがあるとつい判定文を外に出してしまいがちなのだが、きちんと計測して速くなったかどうか見たほうが良いようだ。
投稿者 Takenori : 2008年02月02日 01:27
comments powered by Disqus