2013-11-25 78 views
-2

任何人都可以幫助我理解-ffast-math選項在使用gcc編譯時會做什麼。在執行-O3和-ffast-math時,我發現程序執行時間相差20秒,而使用-O3相比,我只看到了0秒的差距。在使用gcc編譯時,究竟是什麼-ffast-math選項

+4

可能重複[gcc的ffast-math實際上做了什麼?](http://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do) –

回答

13

爲什麼不讀gcc man page,這是你的朋友和我的朋友。下面是它告訴我:

集-fno-數學錯誤號,-funsafe-數學優化, -ffinite,數學只,-fno-舍入數學,-fno-信令NaN和 -fcx-有限範圍。

所以它本身並沒有做任何有趣的事情,但它只是幾個更有趣的編譯器選項的縮寫。個別國旗做什麼?

  • fno-math-errno使得單指令的數學運算未設置ERRNO
  • funsafe-math-optimizations允許採取有效參數,可以違反ANSI和IEEE標準(注​​意,不是真正的樂趣和安全)
  • ffinite-math-only,同樣的數學優化,允許數學優化,假設任何浮點值既不是無限也不是NaN
  • fno-rounding-mathfno-signaling-nans實際上是默認打開的。他們的對手frounding-mathfsignaling-nans禁用了一些潛在的不安全/不可移植的優化。
  • fcx-limited-range允許編譯器不執行某些複數算術檢查。除非您實際使用複雜數字,否則不會影響您的計劃!

簡而言之,它允許編譯器以損失標準合規性和一些安全性爲代價優化您的程序。