gprof 정밀도에 대한 질문

hoppang의 이미지

안녕하세요.

만드는 프로그램을 gprof를 이용해 프로파일링하고 있습니다.

간단한 함수 여러 개가 수백만 회씩 호출되는 프로그램인데 시간이 정확히 측정되지가 않네요.

gprof로 뽑아낸 결과를 보면 3.3초라고 나오는데 실제 수행시간은 25초가 넘습니다.

Quote:

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의 한계인지, 아니면 제가 가능한 옵션을 모르고 있는 것인지, 아니면 윈도우용만 이런 것인지 궁금합니다. 지금 예상보다 실행시간이 길어서 어느 부분이 문제인지 파악을 해야 되는데 리포트가 부정확하니 찾기가 힘드네요 ㅜㅅㅜ

pastime의 이미지

프로그램이 25초 후에 종료되었다고 해도
실제로 실행된 시간은 3.3초일 수 있습니다.

gprof는 실제로 실행된 시간만을 고려하기 때문에
전체 시간은 다를지언정 각 함수가 실행된 시간 비율은 거의 맞을 것입니다.

hoppang의 이미지

Quote:

gprof는 실제로 실행된 시간만을 고려하기 때문에

그렇다면 22초의 차이는 프로그램 외의 부분에서 제가 모르는 어떤 영향을 끼치고 있다고 봐야겠네요. 파일 입출력이 상당히 잦은데 fread나 ReadFile 같은 것이 보이지 않는 걸로 봐선 입출력에 부하가 걸리는지도 모르겠네요.

답변 감사합니다. 도움이 됐습니다. ._.
========================
귀엽고 깜찍한 호빵님~ >ㅁ<

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.