インテル® VTune™ プロファイラー・ユーザーガイド

コールスタック・レポート

インテル® VTune™ プロファイラーは、スタック収集が有効にされたユーザーモード・サンプリングとトレース収集、またはハードウェア・イベントベース・サンプリング収集中にコールスタック情報を収集します。callstacks レポートを使用して、ホットな関数がどのように呼び出されているか理解します。このレポートタイプは、大部分の CPU 時間を占有する関数から始まる呼び出しシーケンスに焦点を当てています。

-column オプションを使用して、コールスタックをフィルター処理し、特定のメトリックに焦点を当てることができます。次のように使用します。

vtune -report -callstacks -r r001ah -column="CPI Rate" 
  

コールスタック・レポートで利用可能なカラムのリストを表示するには、vtune -report callstacks -r <result_dir> column=? コマンドを実行します。

例 1: 項目を限定したコールスタック・レポート

次の例では、最新の解析結果から関数と関数スタックの数を 5 つに制限した、callstacks レポートを生成します。

vtune -report callstacks -limit 5

Windows*:

Function        Function Stack     CPU Time  Module             Function (Full)                  Source File        Start Address
--------------  -----------------  --------  -----------------  -------------------------------  -----------------  -------------
grid_intersect                       5.436s  analyze_locks.exe  grid_intersect                   grid.cpp           0x40d340
                intersect_objects    1.918s  analyze_locks.exe  intersect_objects(struct ray *)  intersect.cpp      0x402840
                shader                   0s  analyze_locks.exe  shader(struct ray *)             shade.cpp          0x404730
                trace                    0s  analyze_locks.exe  trace(struct ray *)              trace_rest.cpp     0x402370
                render_one_pixel         0s  analyze_locks.exe  render_one_pixel                 analyze_locks.cpp  0x401db0
...

Linux*:

Function              Function Stack     CPU Time  Module                 Function (Full)           Source File        Start Address
--------------------  -----------------  --------  ---------------------  ------------------------  -----------------  -------------
initialize_2D_buffer                      22.746s  tachyon_find_hotspots  initialize_2D_buffer      find_hotspots.cpp       0x4018f0
                      render_one_pixel    22.746s  tachyon_find_hotspots  render_one_pixel          find_hotspots.cpp       0x401950
                      draw_trace               0s  tachyon_find_hotspots  draw_trace(void)          find_hotspots.cpp       0x401d70
                      thread_trace             0s  tachyon_find_hotspots  thread_trace(thr_parms*)  find_hotspots.cpp       0x401ef0
                      trace_shm                0s  tachyon_find_hotspots  trace_shm                    trace_rest.cpp       0x410a20
                      trace_region             0s  tachyon_find_hotspots  trace_region                 trace_rest.cpp       0x410aa0
                      rt_renderscene           0s  tachyon_find_hotspots  rt_renderscene(void*)               api.cpp       0x402360
                      tachyon_video            0s  tachyon_find_hotspots  tachyon_video                     video.cpp       0x402240
                      main                     0s  tachyon_find_hotspots  main                              video.cpp       0x4013e0
                      __libc_start_main        0s  libc.so.6              __libc_start_main              libc-start.c        0x21dd0
                      _start                   0s  tachyon_find_hotspots  _start                            [Unknown]       0x40149c
                                                                                                                                                                
grid_intersect                             7.282s  tachyon_find_hotspots  grid_intersect                     grid.cpp       0x408930
                      intersect_objects    2.756s  tachyon_find_hotspots  intersect_objects(ray*)       intersect.cpp       0x40a400
                      shader                   0s  tachyon_find_hotspots  shader(ray*)                      shade.cpp       0x40eae0
...

例 2: コールスタックでグループ化されたコールスタック・レポート

この例では、関数呼び出しのスタックごとにグループ化された r001tr 結果の callstacks レポートを生成します。

vtune -report callstacks -r r001tr -group-by callstack

Windows*:

Function/Function Stack                    Wait Time  Module             Function (Full)
-----------------------------------------  ---------  -----------------  -----------------------------------------
tbb::internal::acquire_binsem_using_event    20.005s  tbb.dll            tbb::internal::acquire_binsem_using_event

func@0x10003350                              13.857s  gdiplus.dll        func@0x10003350
func@0x1000c1f0                                   0s  gdiplus.dll        func@0x1000c1f0
BaseThreadInitThunk                               0s  KERNEL32.DLL       BaseThreadInitThunk
func@0x6b2dacf0                                   0s  ntdll.dll          func@0x6b2dacf0
func@0x6b2daccf                                   0s  ntdll.dll          func@0x6b2daccf

video::main_loop                             10.111s  analyze_locks.exe  video::main_loop(void)
main                                              0s  analyze_locks.exe  main
WinMain                                           0s  analyze_locks.exe  WinMain
_tmainCRTStartup                                  0s  analyze_locks.exe  _tmainCRTStartup
[Unknown stack frame(s)]                          0s  [Unknown]          [Unknown stack frame(s)]
BaseThreadInitThunk                               0s  KERNEL32.DLL       BaseThreadInitThunk
func@0x6b2dacf0                                   0s  ntdll.dll          func@0x6b2dacf0
...

Linux*:

Function/Function Stack          Wait Time  Module                 Function (Full)                                                                                                                                            
-------------------------------  ---------  ---------------------  -----------------------------------------------------------
draw_task::operator()              98.698s  tachyon_analyze_locks  draw_task::operator()(tbb::blocked_range<int> const&) const                                                                                               
tbb::interface6::internal               0s  tachyon_analyze_locks  tbb::interface6::internal                      
execute<tbb::interface6::internal       0s  tachyon_analyze_locks  execute::interface6::internal                        
[TBB parallel_for on draw_task]         0s  tachyon_analyze_locks  tbb::interface6::internal::execute(void)                                            
[TBB Dispatch Loop]                     0s  libtbb.so.2            tbb::internal::local_wait_for_all(tbb::task&, tbb::task*)                                        
...

関連情報