コマンドラインからソース・オブジェクト表示

パフォーマンスの問題を上手く理解するには、ホットスポットの原因である実際のマシン命令とソースコードを関連付けることが重要です。そのため、コマンドラインから直接ソース/アセンブリー・コードを開くことができます。-source-object オプションを使用して、関連するパフォーマンス・データを含め、レポートのソース/アセンブリー表示モードを切り替えます。コマンドラインでソース・オブジェクトを表示する構文を以下に示します。

vtune -report <report_name> -source-object <object_type>[=]<value> -result-dir <result_path>

ここで、

例 1: ソースデータのレポートを生成

この例は、grid_intersect 関数のソースデータを表示するホットスポット・レポート生成します。grid_intersect関数を呼び出すため同一です。レポートは、ソース、命令、cpi 値のデータカラムのみを表示するようにフィルター処理されます。結果ディレクトリーが指定されていないため、最新のホットスポット解析結果を使用します。

vtune -report hotspots -source-object function=grid_intersect -column=source,instructions,cpi
Source Line Source Instructions Retired CPI Rate ----------- ------------------------------------------------------------------------ -------------------- -------- 461 } 462 463 464 /* the real thing */ 465 static void grid_intersect(grid * g, ray * ry) 466 { 48,867,664 1.301 467 468 469 flt tnear, tfar, offset; 470 vector curpos, tmax, tdelta, pdeltaX, pdeltaY, pdeltaZ, nXp, nYp, nZp; 471 gridindex curvox, step, out; 472 int voxindex; 473 objectlist * cur; 474 475 if (ry->flags & RT_RAY_FINISHED) 7,469,004 1.822 ...

例 2: グループ化されたアセンブリー・データのレポートを生成

この例は、基本ブロックとアドレスでグループ化されたアセンブリー・データを表示するハードウェア・イベント・レポートを生成します。レポートはフィルター処理され、タイトルにブロック、ソース、関数、命令、アセンブリー、CPI、アドレス値を持つデータカラムのみが表示されます。

vtune -report hotspots -r /home/results/r002hs -source-object function=grid_intersect -group-by=basic-block,address -column=block,source,function,instructions,assembly,cpi,address

Basic Block Instructions Retired CPI Rate Assembly Source Line Function (Full) Source File Function Range Size Start Address ----------- -------------------- -------- ------------------------------------------------- ----------- --------------- ----------- ------------------- ------------- 0x40d340 39,900,000 2.238 Block 1 [Unknown] [Unknown] [Unknown] [Unknown] 0 0x40d340 3,800,000 2.000 sub esp, 0xd8 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d346 0 mov eax, dword ptr [0x4130e0] 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d34b 7,600,000 0.750 xor eax, esp 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d34d 3,800,000 4.500 mov dword ptr [esp+0xd4], eax 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d354 5,700,000 0.333 push esi 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d355 1,900,000 1.000 mov esi, dword ptr [esp+0xe4] 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d35c 1,900,000 10.000 push edi 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d35d 3,800,000 0.500 mov edi, dword ptr [esp+0xe4] 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d364 1,900,000 2.000 mov dword ptr [esp+0x74], edi 466 grid_intersect grid.cpp 0x646 0x40d340 0x40d368 3,800,000 3.500 test byte ptr [esi+0x8], 0x8 475 grid_intersect grid.cpp 0x646 0x40d340 0x40d36c 5,700,000 0.667 jnz 0x40d96f <Block 64> 475 grid_intersect grid.cpp 0x646 0x40d340 0x40d372 9,500,000 3.800 Block 2 [Unknown] [Unknown] [Unknown] [Unknown] 0 0x40d372 0 0.000 lea eax, ptr [esp+0x50] 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d376 push eax 478 [Unknown] [Unknown] [Unknown] [Unknown] 0x40d377 1,900,000 11.000 lea eax, ptr [esp+0x8c] 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d37e 1,900,000 0.000 push eax 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d37f 3,800,000 1.000 push esi 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d380 0 push edi 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d381 1,900,000 1.000 call 0x40e4a0 <grid_bounds_intersect> 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d386 15,200,000 2.375 Block 3 [Unknown] [Unknown] [Unknown] [Unknown] 0 0x40d386 13,300,000 2.286 add esp, 0x10 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d389 1,900,000 3.000 test eax, eax 478 grid_intersect grid.cpp 0x646 0x40d340 0x40d38b jz 0x40d96f <Block 64> 478 [Unknown] [Unknown] [Unknown] [Unknown] 0x40d391 3,800,000 2.000 Block 4 [Unknown] [Unknown] [Unknown] [Unknown] 0 0x40d391 0 0.000 movsd xmm0, qword ptr [esp+0x88] 481 grid_intersect grid.cpp 0x646 0x40d340 0x40d39a 3,800,000 1.000 comisd xmm0, qword ptr [esi+0x48] 481 grid_intersect grid.cpp 0x646 0x40d340 0x40d39f 0 jnbe 0x40d96f <Block 64> 481 grid_intersect grid.cpp 0x646 0x40d340 0x40d3a5 5,700,000 2.000 Block 5 [Unknown] [Unknown] [Unknown] [Unknown] 0 0x40d3a5 1,900,000 1.000 sub esp, 0x8 484 grid_intersect grid.cpp 0x646 0x40d340 0x40d3a8 1,900,000 1.000 lea eax, ptr [esp+0x10] 484 grid_intersect grid.cpp 0x646 0x40d340

関連情報