최적화 선택지는 증상에서 출발해 우선순위를 정한다
여섯 항목을 모두 훑는 것이 아니라, 측정된 병목의 성격에 맞는 레버부터 확인합니다.
증상
먼저 볼 것
후순위 또는 주의
빌드가 느리다
릴리스 옵션, LTO, 불필요한 디버그 설정을 확인한다.
-O3와 fast-math는 정확성 영향을 본 뒤 적용한다.입력 크기가 커질수록 급격히 느리다
알고리즘 복잡도와 자료구조 선택을 먼저 바꾼다.
미세 튜닝은 복잡도 병목을 가리지 못한다.
순회는 많은데 캐시 미스가 높다
연속 저장, 데이터 배치, 순차 접근을 점검한다.
포인터가 많은 구조는 locality를 잃기 쉽다.
할당 시간이 많이 보인다
reserve(), 재사용, move, pool을 검토한다.복잡한 커스텀 allocator는 측정 후에 둔다.
CPU가 남거나 I/O가 막힌다
작업 분할, 배치 처리, 버퍼링을 비교한다.
병렬화는 락 경합과 순서 비용을 함께 만든다.
원칙: 컴파일러 옵션은 출발점이고, 큰 성능 차이는 대개 알고리즘, 자료구조, 메모리 배치에서 먼저 나옵니다.