主に単精度浮動小数点数で動作するコードがあります。超越関数への呼び出しは、かなり頻繁に発生します。今、sin()、cos()、sqrt()などを使用しています。double
を受け入れて返します。それがx87だけのためにコンパイルされるとき、私は単精度と倍精度の間に違いがないことを知っています。私はAgner Fogの最適化ガイドを読んでいますが、SSE命令を利用したこれらの関数のソフトウェアバージョンは単精度浮動小数点数のほうが高速です。sinf()、cosf()、sin()、cos()とのパフォーマンスの差
float x = 1.23;
float y = sin(x);
または丸め規則は、このような最適化を妨げるものではない:
私の質問は、それはのようなものに遭遇した場合、コンパイラが自動的に高速化機能を使用するかどうか?
検索と置換を行い、パフォーマンスが向上しているかどうかを確認するだけで十分です。問題は、私もこれらの関数へのポインタが必要です。 MSVCでは、sinf()、cosf()、およびfriendsはインライン関数です。したがって、それらを使用するには少しの体操が必要です。努力する前に、私はそれが価値があるかどうかを知りたいと思います。
MSVC以外にも、gccをターゲットにしています。
これらの機能を呼び出すのが本当に減速し、時間を浪費することは確実でしょうか?あなたのコードをプロファイルしましたか? –