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