C++ 프로파일링

프로파일러 해석 기준

성능 프로파일링은 감으로 고치는 일이 아니라 시간, 할당, 캐시, 락 대기 중 어떤 자원이 막히는지 확인하는 과정이다. sampling과 instrumentation의 차이를 알고 기준선을 남긴다.

01

시나리오 고정

입력 크기, 빌드 옵션, 하드웨어, 반복 횟수를 고정해 기준선을 만든다.

release build
02

도구 선택

전체 흐름은 sampling, 작은 함수 비용은 instrumentation 또는 benchmark를 쓴다.

오버헤드 차이
03

핫스팟 해석

exclusive time과 inclusive time을 구분해 직접 비용과 호출 하위 비용을 나눈다.

call tree
04

수정 검증

변경 후 같은 조건으로 다시 측정하고 평균뿐 아니라 분산도 확인한다.

회귀 방지
CPU
계산 시간이 지배 알고리즘 복잡도, branch miss, vectorization 후보를 본다.
핫 함수
Allocation
할당과 해제 비용 반복 루프 안 임시 객체, string copy, container 재할당을 찾는다.
reserve
Cache
메모리 접근 패턴 연속 저장, 구조체 배치, false sharing을 확인한다.
locality
Lock
동시성 대기 mutex 경합, condition wait, I/O 대기를 시간과 함께 본다.
contention

빌드 · 입력 · 검증 점검

빌드 debug 빌드 결과로 release 성능을 판단하지 않는지 확인한다.
입력 작은 샘플에서 빠른 코드가 실제 크기에서도 빠른지 복잡도를 본다.
검증 성능 개선 뒤 결과 정확성과 예외 경로가 유지되는지 테스트한다.