gprof 정밀도에 대한 질문
안녕하세요.
만드는 프로그램을 gprof를 이용해 프로파일링하고 있습니다.
간단한 함수 여러 개가 수백만 회씩 호출되는 프로그램인데 시간이 정확히 측정되지가 않네요.
gprof로 뽑아낸 결과를 보면 3.3초라고 나오는데 실제 수행시간은 25초가 넘습니다.
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
11.21 0.37 0.37 _Unwind_SjLj_Register
10.00 0.70 0.33 _Unwind_SjLj_Unregister
7.58 0.95 0.25 std::string::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int)
7.27 1.19 0.24 10000000 0.00 0.00 Arm_vm::Execute()
6.06 1.39 0.20 10000000 0.00 0.00 Arm_vm::_execute(ARMinstruction const&)--- 중간 생략
0.00 3.30 0.00 1 0.00 0.00 MimicMsg::Save()
0.00 3.30 0.00 1 0.00 0.00 MimicMsg::MimicMsg()
0.00 3.30 0.00 1 0.00 0.00 std::_Deque_base, std::allocator > >::~_Deque_base()
0.00 3.30 0.00 1 0.00 0.00 std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&)
0.00 3.30 0.00 1 0.00 0.00 std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&)
0.00 3.30 0.00 1 0.00 0.00 std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&)
프로파일러가 아주 정확할 수는 없겠지만 이건 시간차가 좀 많이 나네요. (실제 실행시간은 스톱워치로 재본결과 약 25.7초)
짧은 함수를 여러 번 호출할 경우에 시간 샘플링이 정확하게 이루어지지 않는 듯한데 이게 gprof의 한계인지, 아니면 제가 가능한 옵션을 모르고 있는 것인지, 아니면 윈도우용만 이런 것인지 궁금합니다. 지금 예상보다 실행시간이 길어서 어느 부분이 문제인지 파악을 해야 되는데 리포트가 부정확하니 찾기가 힘드네요 ㅜㅅㅜ
그냥 쓰셔도 될 듯..
프로그램이 25초 후에 종료되었다고 해도
실제로 실행된 시간은 3.3초일 수 있습니다.
gprof는 실제로 실행된 시간만을 고려하기 때문에
전체 시간은 다를지언정 각 함수가 실행된 시간 비율은 거의 맞을 것입니다.
인용: gprof는 실제로
그렇다면 22초의 차이는 프로그램 외의 부분에서 제가 모르는 어떤 영향을 끼치고 있다고 봐야겠네요. 파일 입출력이 상당히 잦은데 fread나 ReadFile 같은 것이 보이지 않는 걸로 봐선 입출력에 부하가 걸리는지도 모르겠네요.
답변 감사합니다. 도움이 됐습니다. ._.
========================
귀엽고 깜찍한 호빵님~ >ㅁ<
댓글 달기