2012-08-24 5 views
3

gprof를 조사했습니다. 하지만 다음을 준수하는 방법을 이해하지 못합니다.특정 기능 프로파일 링 C++

나는 클러스터링 절차를 작성했습니다. 각 반복에서 4 개의 함수가 반복적으로 호출됩니다. 수행 할 약 100000 번의 반복 작업이 있습니다. 각 기능에 소요 된 시간을 확인하고 싶습니다.
이 함수는 다른 하위 함수를 호출 할 수 있으며 해시 맵,지도 등의 데이터 구조를 포함 할 수 있습니다.하지만이 하위 함수는 신경 쓰지 않습니다. 모든 반복에서 모든 부모 함수에 총 시간이 얼마나 소요되었는지 알고 싶습니다. 이렇게하면 프로그램을 더 잘 최적화 할 수 있습니다.

gprof의 문제점은 모든 기능을 분석한다는 것입니다. 따라서 stl 데이터 구조의 기능조차도 고려해야합니다.

현재 clock_gettime이 사용 중입니다. 각 함수에 대해 반복 할 때마다 걸리는 시간을 출력합니다. 그런 다음이 출력 파일을 조작합니다. 이를 위해 많은 프로파일 링 코드를 입력해야합니다. 프로파일 링 코드는 코드가 매우 복잡해 보이므로이를 피하고 싶습니다. 이것이 산업에서 어떻게 이루어 집니까?

더 쉬운 방법이 있나요? 당신이 다른 청소기 방법이있는 경우

, 내가

+0

Intel VTune Amplifier – BSen

답변

4

정확하게 이해한다면 관심이있는 네 가지 대상 기능에 소요 된 시간은 관심이 있지만 해당 기능에서 호출하는 하위 기능은 아닙니다.

이 정보는 gprof의 "flat"프로필에서 "self seconds"아래에 제공됩니다. 또는 콜 그래프를보고있는 경우이 타이밍은 "자체"열에 있습니다.

1

내가 telemetry에서 살펴 것 알려 주시기 바랍니다. 주로 프레임 당 데이터를 비교하려는 게임 개발자를 대상으로하지만 사용자 요구 사항에 잘 부합하는 것으로 보입니다.

1

이러한 4 가지 기능의 자체 시간을 원하므로 구체적으로 최적화 할 수 있습니다.

gprof은 총 시간 대비 %로 표시됩니다. 10 %라고 가정합니다. 그렇다면 0 %로 최적화 할 수 있다고해도 100/90 = 1.11의 속도 향상 요소 또는 11 %의 속도 향상을 얻을 수 있습니다. 100 초가 걸리고 너무 느린 경우 90 초가 너무 느립니다.

그러나 이러한 기능에 걸리는 부터 (자체 + 피 호출자) 시간은 훨씬 더 큰 80 % 인 숫자를 선택하는 경향이 있습니다. 그렇다면 피 호출자에게 전화하는 횟수를 줄임으로써 훨씬 더 최적화 할 수 있습니다. 양자 택일로, 피 호출자는 일반적으로 인수를 테스트하는 것과 같이 엄격하게 수행 할 필요가없는 일을 수행하는 큰 비율을 지출하고있는 경우가 있습니다.이 경우에는 임시 루틴으로 대체 할 수 있습니다.

실제로 엄밀히 말하자면 자기 시간이란 없습니다. 프로그램 카운터가있는 가장 간단한 명령조차 실제로는 마이크로 코드 서브 루틴 호출입니다.

Here is some discussion of the issues and a constructive recommendation.