C ++ 컴파일 프로세스 프로파일 링
나는 다소 큰 템플릿 헤더 전용 C ++ 라이브러리를 작성하는 경향이 있으며 사용자는 일반적으로 컴파일 시간에 대해 불평합니다. 그 문제를 생각 해보니 시간이 어디로 가는지 전혀 모른다는 생각이 들었 습니다 . g ++, icc 및 xlC와 같은 일반적인 컴파일러로 C ++ 컴파일 프로세스를 프로파일 링하는 간단한 방법이 있습니까? 예를 들어 C ++ 컴파일의 각 단계 에서 얼마나 많은 시간이 소요되는지 알 수 있습니까?
들어 GCC 가 디버깅 옵션을 찾을how much time is spent within each of the phases of C++ compilation?
-Q 컴파일러가 컴파일 될 때 각 함수 이름을 인쇄하고 완료되면 각 패스에 대한 일부 통계를 인쇄합니다.
-ftime-report 컴파일러가 각 패스가 완료 될 때 소비 된 시간에 대한 통계를 인쇄하도록합니다.
패스는 GCCINT 9 : 컴파일러의 패스 및 파일에 설명되어 있습니다.
-v -ftime-report
여기에서 단일 소스 파일의 g ++ 컴파일 출력을 게시 하여 논의 할 수 있습니다. GCC 메일 링리스트 에 도움이 될 수 있습니다 .
컴파일러를 들어 GCC 이외의 (또는 GCC 개 고대의 이상 3.3.6 )이 글의 다른 옵션을 참조하십시오.
거기 도구 거의 모든 컴파일러와 빌드 시스템에 유용 할 수있는 부스트 프로젝트에서이.
이 도구에는 및 매크로 호출을 사용하는 소스 코드 계측 이 필요 합니다. 그런 다음 이러한 매크로는 컴파일 타임에 특정 진단 (경고)을 생성하며, 이는 스크립트에 의해 인스턴스화 콜 스택 (결과적으로 콜 그래프를 작성 하고 시각화 할 수 있음)과 함께 시간이 지정되고 수집 됩니다. 나쁘지 않습니다, IMO.TEMPLATE_PROFILE_ENTER()
TEMPLATE_PROFILE_EXIT()
그래도 아직 사용하지 않았습니다.
나는 아직 그것을 시도하지 않았지만 templight는 매우 유망 해 보인다 : https://github.com/mikael-s-persson/templight
당신은 그것들을 어느 정도 분리 할 수 있습니다 (나는 가정하고 있습니다 make
)
- 파일을 전처리하는 빌드 규칙 (
-E
스위치 사용)과.PHONY
일반 바이너리 대상이.o
파일에 의존하는 것처럼 전 처리기 출력 파일에 의존하는 대상을 추가 합니다. 이 타겟을 구축하는 데 걸리는 시간 측정 'PHONY
모든.o
파일 에 종속 되지만 링크하지 않는 대상을 추가하십시오 . 이 타겟을 구축하는 데 걸리는 시간 측정 (깨끗한 상태에서)- 일반적인 바이너리의 클린 빌드를 수행하는 데 걸리는 시간 측정
이제 사전 처리, 컴파일 및 링크하는 데 걸리는 시간을 알 수 있습니다. -O0
두 번째 및 세 번째 대상의 최적화 된 버전과 최적화되지 않은 버전 ( )을 비교 하여 최적화 프로그램에서 소요 된 시간을 확인할 수도 있습니다.
strace -e trace=process -f -r -ttt -T
적어도 많은 프로세스로 분할 된 g ++와 같은 컴파일러의 경우에서 일부 변형을 사용하여 약간의 견인력을 얻을 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/13559818/profiling-the-c-compilation-process
'IT TIP' 카테고리의 다른 글
C #에서 속성을 'out'매개 변수로 전달 (0) | 2020.10.19 |
---|---|
과거 원시 날씨 데이터는 어디에서 찾을 수 있습니까? (0) | 2020.10.19 |
이메일 주소에 다국어 (영어가 아닌) 문자가 포함될 수 있습니까? (0) | 2020.10.19 |
연관 테이블을 사용하는 것보다 플래그를 비트 마스크로 저장하는 것이 언제 더 낫습니까? (0) | 2020.10.19 |
Database.BeginTransaction 대 Transactions.TransactionScope (0) | 2020.10.19 |