gprof
提供: C++入門
スポンサーリンク
gprof (GNU Profiler)とは、GNUが提供しているプロファイラです。プログラムのパフォーマンスを改善するためには、プログラムのボトルネックが特定できなければなりません。gprofは、アプリケーションがどの処理に最も時間を費やしているかを特定するのに役立ちます。gprofは、コールグラフプロファイルデータを表示するためのコマンドです。
読み方
- gprof
- じーぷろふ
概要
gprofを使用するためには、プログラムのコンパイル時にgprofを有効にしなければなりません。
プロファイルデータを表示するまでの簡単な手順を以下に示します。
- gprof を有効にしてコンパイル(-pgオプション)します。
- プログラムを実行する。この時点で、コールグラフプロファイルデータが作成されます。
- gprofでコールグラフプロファイルデータを表示します。
使い方
プロファイルデータを表示するまでのコマンドでの手順は、以下の通りです。
$ c++ -gp main.cpp $ ./a.out $ gprof a.out a.out.gmon > a.out.gprof $ vim a.out.gprof
実行例
コマンドラインオプション
Usage: gprof [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqSQZ][name]] [-I dirs] [-d[num]] [-k from/to] [-m min-count] [-t table-length] [--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]] [--[no-]flat-profile[=name]] [--[no-]graph[=name]] [--[no-]time=name] [--all-lines] [--brief] [--debug[=level]] [--function-ordering] [--file-ordering] [--directory-path=dirs] [--display-unused-functions] [--file-format=name] [--file-info] [--help] [--line] [--min-count=n] [--no-static] [--print-path] [--separate-files] [--static-call-graph] [--sum] [--table-length=len] [--traditional] [--version] [--width=n] [--ignore-non-functions] [--demangle[=STYLE]] [--no-demangle] [--external-symbol-table=name] [@FILE] [image-file] [profile-file...]
プロファイルの実行例
C++のメソッド名が長いので、表示を省略して掲載しています。
$ gprof resize.out resize.out.gmon -p | cut -c 1-80 |head -n 30 Flat profile: Each sample counts as 0.000123031 seconds. % cumulative self self ?? time seconds seconds calls ms/call ms/call ?? 89.19 9.69 9.69 std::time_put<wchar_t, std 6.07 10.35 0.66 1 659.69 659.69 std::time_get<wchar_t, std 2.40 10.61 0.26 140000022 0.00 0.00 __cxa_free_dependent_exce 1.79 10.80 0.19 11 17.65 43.35 __cxa_allocate_exception 0.31 10.84 0.03 2 16.98 16.98 std::string::_Rep::_M_dest 0.23 10.86 0.02 60000087 0.00 0.00 __cxa_allocate_dependent_e 0.00 10.86 0.00 20 0.00 1.70 __cxa_free_exception 0.00 10.86 0.00 18 0.00 0.00 std::locale::_Impl::_Impl( 0.00 10.86 0.00 14 0.00 0.00 std::locale::facet::_S_get 0.00 10.86 0.00 12 0.00 0.00 std::locale::_Impl::_Impl( 0.00 10.86 0.00 10 0.00 0.00 d_print_comp 0.00 10.86 0.00 8 0.00 0.00 std::__timepunct_cache<cha 0.00 10.86 0.00 6 0.00 0.00 std::basic_ostream<char, s 0.00 10.86 0.00 6 0.00 0.00 std::messages<char>::messa 0.00 10.86 0.00 5 0.00 0.00 std::ostream::seekp(std::f 0.00 10.86 0.00 4 0.00 0.00 std::time_get<char, std::i 0.00 10.86 0.00 4 0.00 0.00 std::basic_ostream<char, s 0.00 10.86 0.00 4 0.00 0.00 std::__numpunct_cache<char 0.00 10.86 0.00 4 0.00 0.00 std::numpunct<char>::numpu 0.00 10.86 0.00 4 0.00 0.00 std::time_put<char, std::o 0.00 10.86 0.00 2 0.00 18.66 __gnu_cxx::__throw_concurr 0.00 10.86 0.00 2 0.00 0.00 std::num_get<char, std::is 0.00 10.86 0.00 2 0.00 0.00 std::num_put<char, std::os 0.00 10.86 0.00 2 0.00 0.00 std::num_put<char, std::os 0.00 10.86 0.00 2 0.00 0.00 std::time_get<char, std::i
それぞれの意味は、以下の通りです。
% the percentage of the total running time of the time program used by this function. cumulative a running sum of the number of seconds accounted seconds for by this function and those listed above it. self the number of seconds accounted for by this seconds function alone. This is the major sort for this listing. calls the number of times this function was invoked, if this function is profiled, else blank. self the average number of milliseconds spent in this ms/call function per call, if this function is profiled, else blank. total the average number of milliseconds spent in this ms/call function and its descendents per call, if this function is profiled, else blank. name the name of the function. This is the minor sort for this listing. The index shows the location of the function in the gprof listing. If the index is in parenthesis it shows where it would appear in the gprof listing if it were to be printed.
関連項目
ツイート
スポンサーリンク