Linux에서 실행되는 몇 가지 매우 간단한 C++ 프로그램을 프로파일 링했습니다. main()의 포괄적 인 비용은 모두 3.83 %와 같이 100 %가 아닙니다. callgrind를 올바르게 사용하고 있습니까? 아래에 --inclusive=yes
이 붙여진 callgrind_annotate
의 결과가 있습니다.Callgrind main() 포함 비용이 100 %보다 훨씬 작음
프로그램은 단순한 힙 정렬을 수행하는 힙이라고합니다. I가 사용되는 명령은 그 다음, I 입력
valgrind --tool=callgrind ./heap
이다
callgrind_annotate --inclusive=yes callgrind.out.25434
출력 : main()
통화 그래프 가기 기능없는
`--------------------------------------------------------------------------------
Profile data file 'callgrind.out.25434' (creator: callgrind-3.6.0)
`--------------------------------------------------------------------------------
I1 cache:
D1 cache:
LL cache:
Timerange: Basic block 0 - 361578
Trigger: Program termination
Profiled target: ./heap (PID 25434, part 1)
Events recorded: Ir
Events shown: Ir
Event sort order: Ir
Thresholds: 99
Include dirs:
User annotated:
Auto-annotation: off
`--------------------------------------------------------------------------------
Ir
`--------------------------------------------------------------------------------
2,552,558 PROGRAM TOTALS
`--------------------------------------------------------------------------------
Ir file:function
`--------------------------------------------------------------------------------
2,552,558 ???:0x00000810 [/lib/ld-2.7.so]
2,515,793 ???:0x00000a60 [/lib/ld-2.7.so]
2,515,219 ???:0x00015270 [/lib/ld-2.7.so]
2,514,780 ???:0x000021e0 [/lib/ld-2.7.so]
2,456,164 ???:0x0000b2f0 [/lib/ld-2.7.so]
2,256,719 ???:0x00009e40 [/lib/ld-2.7.so]
1,702,371 ???:0x00009ac0 [/lib/ld-2.7.so]
657,883 ???:0x000098e0 [/lib/ld-2.7.so]
367,045 ???:0x00017040 [/lib/ld-2.7.so]
33,170 ???:0x080483e0 [/home/test/heap]
33,036 ???:0x0000ce60 [/lib/ld-2.7.so]
31,347 ???:0x0000e850 [/lib/ld-2.7.so]
30,706 ???:(below main) [/lib/libc-2.7.so]
30,071 ???:0x00008570 [/lib/ld-2.7.so]
27,954 ???:0x0000f500 [/lib/ld-2.7.so]
27,758 ???:0x0000ca30 [/lib/ld-2.7.so]
21,366 ???:0x0001767b [/lib/ld-2.7.so]
최소한 출력물 중 일부가 누락 된 것 같습니다. 특히, 나는 포함 된 비용 수치를 보지 못합니다. 프로그램이 실행되기까지 얼마나 걸립니까? 더 오래 걸릴 수 있도록 배열하면 (예 : 힙 배열이 훨씬 긴 배열), 포괄 비용이 100 %에 더 가깝습니까? main()이 호출되기 전에 런타임에서 수행하는 작업은 모두 계산되지 않으므로 main()이 동적 라이브러리를로드하는 것보다 훨씬 저렴하면 포함 된 비용이 100 % 미만의 어떤 방법이 될 수 있습니다. 절대 단위로 부족한 부분은 무엇입니까 (예 : ms)? –
감사합니다 Gareth! 힙 정렬은 1 초 미만입니다. 나는 그것을 더 오랫동안 돌릴 것이다. 내가 callgrind를 올바르게 사용하고 있는지 확인하고 싶습니다. 실제 응용 프로그램을 프로파일 링 할 때 callgrind로 식별되는 큰 병목 현상 (47 % 만 제거)을 수행 한 이후로 전체 실행 시간이 전혀 변경되지 않습니다. – Shawn