-2

gccでコンパイルしたときに -ffast-math オプションが何をするのかを理解するのに役立つ人はいますか? -O3 と -ffast-math を使用して実行した場合、-O3 のみを使用した場合と比較して、プログラムの実行時間に 20 秒の差が見られます

4

1 に答える 1

16

gcc のマニュアル ページを読んでみませんか。それはあなたの友人であり、私の友人でもあります。これが私に言ったことです:

-fno-math-errno、-funsafe-math-optimizations、-ffinite-math-only、-fno-rounding-math、-fno-signaling-nans、および -fcx-limited-range を設定します。

したがって、それ自体で興味深いことは何もありませんが、いくつかの興味深いコンパイラ オプションの省略形にすぎません。個々のフラグは何をしますか?

  • fno-math-errno単一命令の算術演算を設定しないようにしますERRNO
  • funsafe-math-optimizations有効な引数を想定し、ANSI および IEEE 標準に違反する可能性がある数学の最適化を許可します (注意、実際には楽しく安全ではありません)。
  • ffinite-math-only、同様に、浮動小数点値が無限でも無限でもないと仮定する数学の最適化を許可しますNaN
  • fno-rounding-math実際にfno-signaling-nansはデフォルトでオンになっています。それらの反対frounding-mathでありfsignaling-nans、潜在的に安全でない/移植できない最適化を無効にします。
  • fcx-limited-rangeコンパイラが特定の複素数算術チェックを行わないようにします。実際に複素数を扱っていない限り、プログラムに影響を与える可能性は低いです!

つまり、標準への準拠とある程度の安全性を犠牲にして、コンパイラーがプログラムを最適化できるようになります。

于 2013-11-25T23:21:14.413 に答える