2013-11-25 15 views
-2

gcc로 컴파일 할 때 -fast-math 옵션이 무엇을하는지 이해하게 도와 줄 수 있습니까? 012와 함께 실행될 때 프로그램 실행 시간에 20 초의 차이가 있음을 알 수 있습니다. -O3 및 -Fast-Math를 -O3 만 사용했을 때와 비교했을 때gcc로 컴파일 할 때 정확히 -phast-math 옵션이 수행하는 것

+4

[gcc의 ffast-math는 실제로 무엇을합니까?] (http://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do) –

답변

13

을 읽지 않는 이유는 친구이자 제 것이기 때문입니다.

설정 -fno-수학 errno를, -funsafe - 수학 - 최적화, -ffinite - 수학 만, -fno-반올림 - 수학, -fno-신호-하는 NaN과 : 여기 나에게 무엇을 -fcx-limited-range.

그래서 그 자체로는 흥미로운 일은 없지만 몇 가지 흥미로운 컴파일러 옵션의 약식 일뿐입니다. 개별 플래그는 무엇을합니까?

  • fno-math-errno 단일 명령 수학 연산을 설정하지하게 ERRNO
  • funsafe-math-optimizations이 허용하는 유효한 인수를 가정 마찬가지로 ANSI 및 (주의, 실제로 재미와 안전하지) IEEE 표준
  • ffinite-math-only을 위반할 수 수학 최적화, 어떤 부동 소수점 값도 무한도 아니며, NaN
  • fno-rounding-mathfno-signaling-nans이 실제로 기본적으로 켜져 있다고 가정하는 수학 최적화를 허용합니다. 그 반대 인 frounding-mathfsignaling-nans은 잠재적으로 안전하지 않거나 변경할 수없는 최적화를 비활성화합니다.
  • fcx-limited-range은 컴파일러가 특정 복소수 산술 검사를 수행하지 못하도록합니다. 실제로 복잡한 숫자로 작업하지 않는 한 프로그램에 영향을 미치지 않습니다!

요약하면 컴파일러는 표준 준수 및 안전성을 잃어 버리지 않고 프로그램을 최적화 할 수 있습니다.