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

パフォーマンスの問題を上手く理解するには、ホットスポットの原因である実際のマシン命令とソースコードを関連付けることが重要です。そのため、コマンドラインから直接ソース/アセンブリー・コードを開くことができます。-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    

関連情報