반응형
# gcc 최적화 옵션
- O : 최적화 전체 수준 제어 , 최적화 레벨이 올라갈 수록 컴파일 실행 시간과 메모리 소비율이 증가합니다.
- - O0 : 최적화x
- - O, O1 : 코드 크기와 실행 시간 감소
- - O2 : 메모리 공간과 속도의 희생을 제외하고 최적화 (loop unrlloing, function inlining에 대한 최적화 수행 x)
- - O3 : O2 최적화GDB API - 레퍼런스 정리에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행
- - Os : O2 최적화 기능을 사용하지만, 코드 크기를 증가시키지 않음
- - Og : (GCC4.8++) 디버깅에 혼란을 주는 최적화 기능을 제거합니다.
- - Ofast : (GCC4.7++) : -O3, -ffast-math, -no-protect-arens, -fstatck-arrays가 합쳐져있습니다. 최적화 표준 준수율를 깨며, 사용을 권장하지 않습니다.
- march : 컴파일러에 CPU 정보를 알려주어 코드를 만들도록 함.
- CPU 정보 확인
1 | user $cat /proc/cpuinfo |
- 이 정보를 CPU_FLAGS_x86 변수로 바꿔주는 도구를 설치 : app-portage/cpuid2cpuflags : https://github.com/mgorny/cpuid2cpuflags
- 샘플 예시
1 2 3 4 5 | root #cpuinfo2cpuflags-x86 CPU_FLAGS_X86: aes avx avx2 f16c fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3 # make.conf파일에 root #echo "CPU_FLAGS_X86='aes avx avx2 f16c fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3'" >> /etc/portage/make.conf |
1 2 | user $gcc -c -Q -march=native --help=target user $gcc -### -march=native /usr/include/stdlib.h |
- pipe : 컴파일 과정을 빠르게합니다. (메모리 소모율이 증가합니다.)
- formit-frame-pointer: 생성 코드의 크기를 줄입니다. (디버깅의 어려움을 겪을 수 있습니다.)
# 추가 : CFLAG와 CXXFLAGS에서 사용
1 2 | CFLAGS="-march=athlon64 -O2 -pipe" CXXFLAGS="${CFLAGS}" |
# gcc 디버깅 옵션
- g : 디버깅 정보(파일명, line number, 변수와 함수 이름들 등을 포함)를 assebly code와 같이 생성. * 최적화 경우 symbol이 없어지는 것이 발생할 수 있음.
- pg : 프로파일링을 위한 코드 삽입
# gcc 프로파일링 옵션
- p : 수행 시간을 함수 단위나 더 작은 단위로 분석 profiling.
# gcc 비트 지정 옵션
- m32 : 32비트 컴파일
- m64 : 64비트 컴파일
# gcc 심볼 옵션
- M : 심볼 정보를 자세하게 출력
# gcc 라이브러리 지정 옵션
- static : 정적 라이브러리 링크
- shared : 우선적으로 공유 라이브러리와 링크하고 필요한 공유 라이브러리가 존재하지 않으면 정적 라이브러리와 링크
반응형
'Programming > C/C++' 카테고리의 다른 글
C++/wide 문자에 대하여 (0) | 2018.05.22 |
---|---|
C/strcmp, wcscmp, _mbscmp 차이 (0) | 2018.05.16 |
C/Pointer/C포인터의 이해와 활용 - 3 (0) | 2018.03.13 |
C/Pointer/C포인터의 이해와 활용 - 2 (0) | 2018.03.12 |
C/Pointer/C포인터의 이해와 활용 - 1 (0) | 2018.03.12 |