C/C++ 프로그램을 컴파일할 때 최적화 옵션을 주어 속도 향상을 꾀하는 경우가 보통이다. 그런데 잘 살펴보니 gcc와 icc (인텔 컴파일러)에서 기본으로 사용하는 최적화 옵션이 달랐다.


GCC: 기본 최적화 옵션 -> 없음. 우리가 지정해주어야 한다.

ICC: 기본 최적화 옵션 -> O2. 


컴파일 옵션(O1, O2, O3)은 미리 최적화 방법을 만들어 놓은 일종의 프리셋이다. 일반적으로 연구에서 굳이 최적화 옵션을 살펴볼 필요는 없겠지만, O2와 O3의 차이점 정도가 궁금하여 찾아봤다.


'-O' 또는 '-O1'의 경우, 만들어지는 오브젝트, 또는 실행 파일을 가능한 작게 하면서, 컴파일 시간이 오래걸리지 않는 범위에서 최적화를 수행합니다.

'-O2'의 경우, 만들어지는 코드가 가능한 빠르게 수행되도록 하지만, 코드의 크기가 너무 커지지 않도록 하는 범위에서 최적화를 수행합니다.

'-Os'의 경우, '-O2'에서 제공하는 모든 최적화 기능을 다 쓰지만, 코드의 크기를 증가시키는 최적화 기능은 빼고 나서 최적화를 수행합니다.



위 설명의 출처는 KLDP위키 (https://wiki.kldp.org/wiki.php/GccOptimizationOptions) 이다. O2와 O3 모두 코드의 실행 속도가 빠르게 되도록 최적화해주는데 차이가 조금 있다고 한다. 웹에서 조금 찾아보면 O3의 경우 O2보다 반드시 빠르리란 보장도 없으며, 가끔 잘못된 결과를 가져올 수 있다고 한다. 


자세한 것은 모르겠으나, gcc/g++로 컴파일 할 때 최적화 옵션으로 -O2를 반드시 주는걸 잊지 말자.

물론 icc/icpc에선 기본이니까 안줘도 그만이지만.


옵션 주는 방법: gcc prog.c -o prog.out -O2 

+ Recent posts