gcc 의 옵티마이징 파라미터인 -O2 와 -O3 중 어느게 더 빠른가?

ssehoony의 이미지

-O2 와 -O3 의 차이는 inline 확장을 하느냐 안하느냐로 알고 있는데 그렇다면 당연히 -O3 가 빠를거라고 추측을 하는데요.
간혹 이야기를 들어보면 inline 이 오히려 실행코드 사이즈를 늘려서 실행코드가 적제된 page 가 늘어나 오히려 비 효율성을 가져올 수도 있다 라는 것 까지는 알겠습니다.
하지만 그렇다고 해도 -O2 보다는 -O3 가 빠를 것 같은데, -O2 로 컴파일 하는 라이브러리들을 적지 않게 봐서 도통 어느게 더 좋을지 모르겠네요.

과연 어느쪽이 release 용으로 더 좋은 건가요?

doldori의 이미지

inline으로 인한 code bloat 효과를 알고 계신다면 O3가 "당연히" 더 빠를 것이라고
할 수는 없지 않나요? 환경에 상당히 의존적인 부분이라 해보기 전에는 모르는 일이므로
보수적인 선택을 하는 것으로 생각합니다.

vacancy의 이미지

Cache 를 고려하면 상관 관계를 대강 알 수 있죠.

tristansong의 이미지

Bjarne책에서는 특별한 수학적 구현이 아니면 inline함수는 되도록 쓰지말도록 권장하고 있군요!

doldori의 이미지

Herb Sutter도 막연히 빠르겠거니 하는 생각으로 inline을 쓰는 것을
premature optimization으로 보고 있습니다. 프로파일링으로 성능 향상을
확인한 후에나 쓰라고 말하죠. 비슷한 얘기로
Do inline functions improve performance?