IT TIP

C ++ 컴파일 프로세스 프로파일 링

itqueen 2020. 10. 19. 13:48
반응형

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

반응형