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

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

関連情報