重複の可能性:
乗算または除算を使用する必要がありますか?
掛け算と割り算の比較
除算はC ++の乗算よりも高価ですか?
私は最適化を行っており、いくつかの比較の理由から、B/alpha_B を B*alpha_A に変えることができます。乗算と除算のどちらを使用するかを選択できますか?
重複の可能性:
乗算または除算を使用する必要がありますか?
掛け算と割り算の比較
除算はC ++の乗算よりも高価ですか?
私は最適化を行っており、いくつかの比較の理由から、B/alpha_B を B*alpha_A に変えることができます。乗算と除算のどちらを使用するかを選択できますか?
これは、C++ (またはその他の言語) とは関係なく、基盤となるプロセッサ アーキテクチャ/実装とはすべて関係があります。一般に、ほとんどのプロセッサ ファミリでは、除算は乗算よりも 10 倍程度遅くなります。
とはいえ、最近では、除算命令のレイテンシがプログラムの主なパフォーマンスのホットスポットになることはめったにありません (もちろん、マイレージは異なる場合があります)。除算を逆数による乗算に置き換えることが最も理にかなっているのは、ベクトルを定数係数で除算する場合です (ベクトルの正規化、スケーリング、行列ピボットなど)。これは、パイプラインの深さが命令レイテンシをマスクするのに最も効果的でdiv
あり、メモリ帯域幅 (大きなベクトルを想定) がスループットの制限になる可能性が高い場所でもあります。
要するに、最近では、この種のマイクロ最適化に取り組む価値はほとんどありません。ほとんどの場合、コンパイラ オプティマイザは、除算を乗算に置き換えることが理にかなっているケースを認識します。
乗算の方が速いと主張するソースを見つけました:
http://simpletonprogrammer.blogspot.com/2012/01/assumed-optimization-floating-point.html
FMUL と FDIV のタイミングは、少なくともリストされているプロセッサについては、かなり決定的なようです。ただし、他のプロセッサは異なる場合があります。言い換えれば、プロファイリングを学びましょう。