SPDConvertを使用して、サンプル プロファイル誘導最適化(SPGO)用のサンプルプロファイルデータを準備および管理します。
このツールは、SPT ファイル内の生のハードウェア サンプルを SPD 内のコード構造と関連付けます。 この手順では、サンプルの相関関係、フロー スムージング、サイズ/速度の決定を実行し、フロー グラフに注釈が付けられた実行数を含むエンリッチされた SPD ファイルを生成します。
ラボ ベンチマーク、内部監視、運用テレメトリなどの複数のソースのデータを 1 回の変換で結合できます。 特定のシナリオの重要性を強調するために、その SPT ファイルを複数回指定できます。 重要なベンチマーク SPT を 3 回一覧表示すると、実質的にその重みが 3 倍になります。
このツールは、次の 3 つのモードで動作します。
- インポート .SPT データを /SPGO ビルド用の .SPD ファイルに
- 抽出 .PDB から埋め込まれた .SPD ファイルを
- 個別のプロファイリング実行で生成された複数の .SPD ファイルをマージします
SPDConvert は、次の 3 種類のファイルで動作します。
-
ETL (イベント トレース ログ) によって記録された未加工のハードウェア パフォーマンス イベント
xperf -
SPT (サンプル プロファイル トレース) ETL ファイルから
SPTAggregateによって生成されるパッケージ化されたサンプル イベント -
SPD (サンプル プロファイル データベース) 最適化されたビルド中にコンパイラによって使用される処理されたプロファイル データ。
/spdembedビルド中に、PDB シンボル ファイルに SPD ファイルを埋め込むこともできます。
Syntax
既存の SPD ファイルに SPT データをインポートします。
SPDConvert[オプション] spdfilesptfile(s)
PDB から埋め込み SPD ファイルを抽出します。
SPDConvert/extractpdbfilespdfile
複数の SPD ファイルを 1 つにマージします。
SPDConvert/mergeoutputspdfilespdfile(s)
パラメーター
インポート モード
options
インポート モードで次のオプションを指定します。
- /mode:<IP|LBR> プロファイル モードを選択します。 命令ポインター・プロファイル・データ (デフォルト) には IP を使用し、最後の分岐レコード・プロファイル・データには LBR を使用します。
- /リセット: カウントを 0 にリセットします。 このアクションでは、SFT は無視されます。 新しいデータをインポートする前に SPD ファイルをリセットする場合、または指定したファイルが存在しない場合は空の SPD ファイルを作成するには、このオプションを使用します。
- /sptlist:<file> テキスト ファイルに SPT ファイル名を指定し、1 行に 1 つのファイル名を指定します。
- /概要 SPD ファイルの概要を印刷します。
- /ヘルプ ヘルプ情報を表示します。
spdfile
サンプル データをインポートする SPD ファイル。
sptfiles
インポートする 1 つ以上の SPT ファイル。 SPT ファイルは SPTAggregate によって生成されます。
抽出モード (/extract)
pdbfile
埋め込み SPD を含む PDB ファイル。
spdfile
作成する出力SPDファイル。
マージモード (/merge)
outputspdfile
作成する出力先の SPD ファイル。
/retire:<N> プロファイル データのインベントリからの削除率を N/16 に設定します。ここで、0 ≤ N ≤ 16 です。 既定値は 8 です。 この値は、新しい SPT データを追加するときに削除する SPD 内の既存のデータの量を制御します。 たとえば、 /retire:8 は、新しい SPT データを追加する前に、既存のデータの 8/16 (半分) を削除します。 この設定では、古いデータの半分が破棄されるため、新しいプロファイル データの重みが大きくなります。 最も一般的な 2 つの使用法は、すべてのプロファイル実行に等しい重みを与える /retire:0 、または古いデータをすべて削除するため、最新のデータ数のみを作成する /retire:16 です。
SPDConvert が古いプロファイルデータの重要度をどの程度下げるかを制御するには、/retire:N を使用します。 この "繰り越し" の概念により、時間のかかる新しいプロファイル データを最初からやり直すことなく、既存の SPD データを使用してプロファイルを更新できます。 この概念については、 SPGO チュートリアルの「ビルド間での SPD 情報の再利用」で詳しく説明します。
spdfiles
マージ対象の 1 つ以上の SPD ファイル。
注釈
Note
このツールは、Visual Studio開発者コマンド プロンプトから実行します。
SPDConvert は、SPGO ワークフローの主要な変換ツールです。
xperfを使用してトレースを収集し、SPTAggregateを使用して SPT ファイルに変換した後、SPDConvertを使用してサンプル データを SPD ファイルにインポートします。
/SPGO フラグを使用して最適化されたバイナリをビルドすることで、結果の SPD ファイルをコンパイラに渡します。
/extractを使用して、/SPGO ビルド中に PDB に埋め込まれた SPD ファイルを回復します。
/mergeを使用して、再構築する前に複数のプロファイル セッションの SPD ファイルを結合します。
バイナリの GUID と有効期間は、SPT ファイルと SPD ファイルの間で一致する必要があります。 一致しない場合、 SPDConvert は "SPD バージョンに互換性がありません" というエラーを報告します。
SPTDump /progid を使用して SPT ファイル内のバイナリ識別子を確認し、SPDDump /header を使用して SPD ファイルを確認します。
SPD ファイルに記録されるバイナリの GUID と有効期間は、SPT ファイルと一致する必要があります。 このエラーを診断するには、SPTDump /progid を使用して SPT ファイル内のバイナリ識別子を検査し、SPDDump /header を使用して SPD ファイルを検査します。 有効な SPD ファイルは、可能な範囲で使用されます。 プログラムの制御フローを変更しないコードに対する軽微な更新は許容されます。 変更されていない関数では、最適化のためにデータも使用されます。 有効な SPD を指定したが、それ以外の場合は関係のない SPD を指定した場合、プロセスは機能しますが、最適化に使用できるデータがない可能性があります。
Example
次の例では、SPT ファイルから SPD ファイルに LBR プロファイル データをインポートします。
SPDConvert /mode:LBR sample.spd sample.spt
次の例では、SPT ファイルの一覧を使用して IP プロファイル データをインポートします。
SPDConvert /mode:IP /sptlist:mysptfiles.txt sample.spd
この例では、プロファイル データの概要を SPD ファイルに出力します。
SPDConvert /summary sample.spd
次の例では、PDB ファイルから埋め込み SPD を抽出します。
SPDConvert /extract sample.pdb sample_extracted.spd
この例では、異なるプロファイリング実行から 2 つの SPD ファイルをマージします。
SPDConvert /merge combined.spd run1.spd run2.spd
こちらも参照ください
チュートリアル: サンプル プロファイル ガイド付き最適化 (SPGO) を使用してパフォーマンスを改善する
SPDDump
SPTAggregate
SPTDump