プロファイルに基づく最適化 (PGO) サンプルは、アプリケーションのプロファイリングの方法と PGO レポートの生成方法を示す目的で提供されています。また、コード・カバレッジ・ツールやテスト・プライオリタイゼーション・ツールの使用法のデモとしても機能します。
コンパイラーに付属しているその他のサンプルについては、「サンプル」を参照してください。
ソース |
場所 | ||||
---|---|---|---|---|---|
pgotools_sample.c |
|
インストルメント済み実行ファイルを作成します。
プラットフォーム |
コマンド |
---|---|
Linux および Mac OS X |
icc -prof-gen pgotools_sample.c |
Windows |
icl /Qprof-gen pgotools_sample.c |
インストルメント済み実行ファイルのサイズに注目してください。(インストルメント済みアプリケーションと、最後のステップで生成する最適化済みのアプリケーションを比較すると、ファイルサイズに違いがあることがわかります。)
インストルメント済みアプリケーションを実行します。
プラットフォーム |
コマンド |
---|---|
Linux および Mac OS X |
./pgotools_sample |
Windows |
pgotools_sample.exe |
インストルメント済み実行ファイルを実行すると、アプリケーションの実行ごとに動的情報 (.dyn) ファイルが生成されます。コンパイル・ディレクトリーを確認してください。少なくとも 1 つの .dyn 拡張子のファイルが生成されます。
引数を 1 つ渡して、インストルメント済み実行ファイルの 2 回目の実行を行います。
プラットフォーム |
コマンド |
---|---|
Linux および Mac OS X |
./pgotools_sample 1 |
Windows |
pgotools_sample.exe 1 |
2 つ目の .dyn ファイルが作成されます。実行時に使用された関数の動的プロファイル・データが上部に表示されます。
引数を 2 つ渡して、インストルメント済み実行ファイルの 3 回目の実行を行います。
プラットフォーム |
コマンド |
---|---|
Linux および Mac OS X |
./pgotools_sample 1 2 |
Windows |
pgotools_sample.exe 1 2 |
1 2 3 を引数として渡し、もう一度実行します。コンパイル・ディレクトリーには、アプリケーションの各実行で作成された .dyn ファイルが保存されています。
profmerge ツールを使用して、動的情報ファイルをマージします。
プラットフォーム |
コマンド |
---|---|
すべて |
profmerge |
このステップが終了すると、ファイルの拡張子が .dpi の新しいファイルが作成されます。(デフォルト名は、pgopti.dpi です。) .dpi ファイルには、インストルメント実行中に収集されたすべての動的データの概要が含まれます。
詳細は、「profmerge ツールと proforder ツール」を参照してください。
プロファイリング・データを使用して、最適化実行ファイルを作成します。次のコマンドを入力します。(この最後のステップは、PGO レポートを作成するコンパイラーのレポートオプションとともに行うことができます。)
プラットフォーム |
コマンド |
---|---|
Linux および Mac OS X |
icc -prof-use pgotools_sample.c |
Windows |
icl /Qprof-gen pgotools_sample.c |
最適化された実行ファイルのサイズに注目してください。ファイルは、インストルメント済みファイルよりも小さいはずです。このファイルサイズの小さな方のアプリケーションを実行しても、.dyn ファイルは生成されません。
ここでは、サンプルを使用し、コード・カバレッジ・ツールで簡単なレポートを作成する例を紹介します。ツールとレポートの詳細については、「コード・カバレッジ・ツール」を参照してください。
ツールの使用方法は、「サンプルのコンパイルとプロファイル」セクション (上記) の説明と同じですが、1 つだけ異なる点があります。-prof-genx (Linux および Mac OS X) オプションまたは /Qprof-genx (Windows) オプションを使用してインストルメント済み実行ファイルを作成する必要があります。
前回の実行で作成された .dyn ファイルまたは .dpi ファイルがある場合は、次のステップに移る前にそれらを削除してください。
インストルメント済み実行ファイルを
prof-genx で生成します。
インストルメント済み実行ファイルをコンパイルすると .spi ファイルが作成されることに注意してください。
新しい引数をそのつど渡して、何度かインストルメント済み実行ファイルを実行します。
profmerge を使用して .dyn ファイルをマージします。(コード・カバレッジ・ツールは、.dpi ファイルと .spi ファイルを使用してカバレッジレポートを作成します。)
コード・カバレッジ・ツール・レポートを実行します。
プラットフォーム |
コマンド |
---|---|
すべて |
codecov -dpi pgopti.dpi -spi pgopti.spi -ccolor green または codecov -dpi pgopti.dpi -spi pgopti.spi -ccolor yellow -onelinedsbl "cover 0" |
ステータス・インジケーターが 100% に達すると、コンパイル・ディレクトリーには新しい code_coverage.html ファイル、新しい codecoverage ディレクトリーが作成されています。HTML 形式のファイルを開いてレポートを表示してください。
ここでは、サンプルを使用し、テスト・プライオリタイゼーション・ツールで簡単なテスト結果を作成する例を紹介します。ツールの使用方法については、「テスト・プライオリタイゼーション・ツール」を参照してください。
ツールの使用方法は、「サンプルのコンパイルとプロファイル」セクション (上記) の説明と同じですが、-prof-genx (Linux および Mac OS X) または /Qprof-genx (Windows) オプションを使用してインストルメント済み実行ファイルを作成する必要があります。
前回の実行で作成された .dyn ファイルまたは .dpi ファイルがある場合は、次のステップに移る前にそれらを削除してください。
インストルメント済み実行ファイルを prof-genx で生成します。
インストルメント済み実行ファイルをコンパイルすると .spi ファイルが作成されることに注意してください。(テスト・プライオリタイゼーション・ツールでは、.spi
ファイルが使用されます。)
各実行で一意な値を渡して、複数回インストルメント済み実行ファイルを実行します。
profmerge を使用して .dyn ファイルをマージし、.dpi ファイルの名前を指定します。
コマンド例 |
---|
profmerge -prof_dpi firsttest.dpi |
すべての .dyn ファイルを削除します。
各実行で一意な値を渡して、複数回インストルメント済み実行ファイルを実行します。
profmerge を使用して .dyn ファイルをマージし、.dpi ファイルの名前を指定します。
コマンド例 |
---|
profmerge -prof_dpi secondtest.dpi |
testruns.txt という名前のファイルを作成し、dpi 名をこのファイルに追加します。各行に 1 つの名前を追加してください。例えば、次の例ではこれらの実行の testruns.txt ファイルの内容を示します。
.DPI リストファイルの内容 |
---|
firsttest.dpi secondtest.dpi |
テスト・プライオリタイゼーション・ツールを実行して、.dpi リストファイル名を指定し、次のようなコマンドを入力して、レポート結果をレポートファイルに出力します。(レポートファイルはコンパイル・ディレクトリーに作成されます。)
コマンド例 |
---|
tselect -spi pgopti.spi -dpi_list testruns.txt -o tselect_report.txt |
tselect_report.txt ファイルを開きます。ファイルには、次のような結果が含まれます。
ツールの結果 |
---|
Total number of tests = 2 Total block coverage ~ 100.00 Total function coverage ~ 100.00 num %RatCvrg %BlkCvrg %FncCvrg Test Name @ Options --- -------- -------- -------- ------------------- 1 100.00 100.00 100.00 firsttestdpi |