컴퓨팅에서 최적화 컴파일러는 실행 가능한 컴퓨터 프로그램의 일부 속성을 최소화하거나 최대화하는 컴파일러입니다.
일반적인 요구 사항은 프로그램의 실행 시간, 메모리 요구 사항 및 전력 소비를 최소화하는 것입니다.
컴파일러 최적화는 일반적으로 프로그램을 가져와 더 적은 리소스를 사용하거나 더 빠르게 실행하는 의미로,
프로그램을 생성하도록 변환하는 최적화 작업을 사용하여 구현됩니다.
■ 최적화 옵션
-O0: 최적화를 수행하지 않습니다.
-O: 코드 크기와 실행 시간을 줄이는 것을 제외한 최적화를 수행하지 않습니다.
-O1: 코드 크기와 실행 시간을 줄이는 것을 제외한 최적화를 수행하지 않습니다.
-O2: 메모리 공간과 속도를 침범하지 않는 범위 내의 모든 최적화를 수행합니다. loop unrolling과 funtion inlining에 대한 최적화를 수행하지 않습니다. 커널 컴파일의 경우 -O2를 사용합니다. -O3는 인라인을 변경하는데, 커널은 최적화된 수행 속도를 위해 의도적으로 인라인을 사용합니다.
-O3: -O2 최적화에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행합니다. 코드의 크기는 전혀 신경쓰지 않고, 오직 빠른 코드를 만들기 위해 최적화합니다. -O3로 만든 코드가 -O2로 만든 코드보다 빠르다는 보장은 없습니다.
보통 CPU가 기계어를 해석할 경우, 일정한 분량만큼 cache에 미리 저장하여 명령어들을 수행합니다.
-O3를 사용한 코드는 대게 크기가 커서 cache에 들어갈 수 있는 명령의 양이 상대적으로 적어지기 때문에, 오히려 느려질 가능성도 있습니다.
-Os: -O2 최적화 기능을 사용하지만, 코드 크기를 증가시키는 최적화는 생략합니다.
■ Debug Mode : Release Mode
컴파일러들은 Debug Mode와 Release Mode를 지원합니다.
- Debug Mode: -O1 최적화를 수행합니다. 디버깅 정보를 삽입합니다.
- Release Mode: -Os 최적화를 수행합니다. 디버깅 정보를 삽입하지 않고 코드를 최적화하여 실행 파일 크기를 최대한 줄일 수 있습니다.
'ATmega' 카테고리의 다른 글
Linux 환경 AVRDUDE 사용법 (0) | 2020.07.31 |
---|---|
CodeVisionAVR 환경 Atmega에 Hex 파일 다운로드 (0) | 2020.01.30 |
1초에 인터럽트 1000번 발생시키기 (0) | 2020.01.21 |
AVR용 컴파일러 비교 및 설치 (0) | 2020.01.20 |