インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
テスト・プライオリタイゼーション・ツール (tselect ツールとも呼ばれる) を使用すると、サポートされるすべてのインテル® アーキテクチャー・ベースの Linux*、Windows*、および macOS* オペレーティング・システムで、アプリケーションの以前の実行プロファイルを基に、アプリケーション・テストを選択して優先順位を設定し、プロファイルに基づく最適化を行うことができます。
ツールにより、テストがボトルネックとなる大規模なアプリケーションのテストと開発にかかる時間を大幅に節約できます。
開発中に、アプリケーション・モジュールの変更が必要になることがあります。アプリケーションを変更する際、開発者は、アプリケーションが変更前と同じ機能やパフォーマンスを保っていることを確認するためにアプリケーション・テストを行いますが、これは手間のかかる作業です。テスト・プライオリタイゼーション・ツールを使用すると、アプリケーションのプロファイルが変更されたときに、ソフトウェア開発者はアプリケーション・テストを選択して優先順位を設定できます。
このツールの使用方法については、次のセクションをそれぞれ参照してください。
特徴と利点
要件と構文
使用モデル
ツールオプション
ツールの実行
テスト・プライオリタイゼーション・ツールは、アプリケーションのコードカバレッジを基に、効率的なテスト階層を示します。このツールを使用する利点は次のとおりです。
アプリケーションの任意のサブセットで全体をカバーするために必要なテストの数を最小限にする。ツールはテストの全セットと全く同じコードカバレッジを達成するアプリケーション・テストの最小サブセットを定義します。
テストのターンアラウンド時間を短くする。長い時間を費して多くの失敗を見つける代わりに、ユーザーは、セットの変更によって問題が発生する少数のテストを素早く見つけることができます。
テストの実行時のデータを基に、最短時間で特定のレベルのコードカバレッジを達成するテストを選択して重要度付けを行います。
このツールを実行するために必要なファイルの作成については、「プロファイルに基づく最適化の理解」および「アプリケーションのプロファイル」を参照してください。
テスト・プライオリタイゼーション・ツールでは、以下のファイルが必要です。
-prof-gen=srcpos オプション (Linux* および macOS*) または /Qprof-gen:srcpos オプション (Windows*) を使用してインストルメント済みバイナリー用にアプリケーションをコンパイルしたときに、インテル® コンパイラーによって生成される .spi ファイル。
profmerge ツールで各アプリケーション・テストの動的プロファイル情報ファイル (.dyn) をマージして生成される .dpi ファイル。個々のテスト用に生成されたすべての .dyn ファイルで profmerge ツールを実行し、生成された .dpi ファイルにテストを一意に識別できる名前を付けます。
重要度付けするテストのリストを含む、ユーザーが作成したファイル。インストルメント済みコードを正しく実行するには、次の操作を行ってください。
各テストが一意に識別できるように、各テストの .dpi ファイルに名前を付けます。
.dpi リストファイル (すべての .dpi テストファイルの名前を記述したテキストファイル) を作成します。
.dpi リストファイルの各行には、1 つの .dpi ファイル名のみを記述するようにしてください。オプションで、ファイル名に続けてテストの実行時間を dd:hh:mm:ss 形式で記述することができます。
例: Test1.dpi 00:00:60:35 は、Test1 が (0 日 0 時間) 60 分 35 秒実行されたことを示します。
実行時間の記述はオプションです。しかし、実行時間が記述されていない場合、ツールは実行時間を最小限にするテストの重要度付けを行いません。テストの数を最小限にする重要度付けのみを行います。
profmerge ツールは指定されたディレクトリーに存在するすべての .dyn ファイルをマージします。無関係な .dyn ファイルが存在していないことを確認してください。無関係な .dyn ファイルが存在していると、プロファイル情報に無効なプロファイル・データが含まれてしまいます。この結果、不適切なカバレッジ情報が生成され、最適化されたコードのパフォーマンスに悪影響を与えることがあります。ツールの構文は、次のとおりです。
ツールの構文 |
---|
tselect -dpi_listfile |
-dpi_list は、すべての .dpi ファイルのリストを含むリストファイルへのパスを設定する、必須のツールオプションです。他のすべてのツールコマンドはオプションです。
Windows* のみ: フォワードスラッシュ ("/") から始まるコンパイラー・オプションとは異なり、ツールオプションはハイフン ("-") から始まります。
次の図は、典型的なテスト・プライオリタイゼーション・ツールの使用モデルを示したものです。
次の表は、ツールが使用するオプションの一覧です。
オプション |
説明 |
---|---|
-help |
ツールオプションの説明を出力します。 |
-dpi_listfile |
必須です。動的プロファイル情報 (.dpi) ファイル名が含まれるリストファイルの名前を指定します。ファイルの各行には 1 つの .dpi ファイル名のみを記述し、オプションでファイル名の後にその実行時間を記述します。名前はテストを一意に識別しなければなりません。 |
-spifile |
静的プロファイル情報 (.spi) ファイルのファイル名を指定します。デフォルトは pgopti.spi です。 |
-ofile |
出力レポートファイルのファイル名を指定します。 |
-compfile |
処理するファイルのリストが含まれるファイル名を指定します。 |
-cutoffvalue |
累積ブロックカバレッジがあらかじめ計算された合計カバレッジの value % に達した場合に終了します。value は 0.0 より大きく、100 以下でなければなりません (例えば、99.00)。value は 100 に設定できます。 |
-nototal |
あらかじめ計算した合計カバレッジプロセスを無視します。 |
-mintime |
テストの実行時間を最小限にします。各テストの実行時間は、dpi_list ファイルのテスト名が含まれる行に、テスト名に続いて dd:hh:mm:ss 形式で記述されていなければなりません。 |
-srcbasedirdir |
絶対パスの代わりにソースファイルに対する相対パスをサポートするために prof-src-root コンパイラー・オプションによるコンパイラーのインストルメンテーション実行中に使用されたものとは異なるトップレベルのプロジェクト・ディレクトリーを指定します。 |
-verbose |
プログラム処理に関するより詳細な情報を生成します。 |
次のステップは、IA-32 アーキテクチャー上でツールを実行する 1 つのシンプルな例を示しています。
次のようなコマンドを入力して、ディレクトリーを指定します。
例 |
---|
set PROF_DIR=c:\myApp\prof-dir |
次のようなコマンドを発行して、プログラムをコンパイルし、インストルメント済みバイナリーを生成します。
オペレーティング・システム |
コマンド |
---|---|
Linux* および macOS* |
icpc -prof-gen=srcpos myApp.cpp |
Windows* |
icl /Qprof-gen:srcpos myApp.cpp |
このコマンドは、プログラムをコンパイルして、インストルメント済みバイナリー myApp と対応する静的プロファイル情報ファイル pgopti.spi を生成します。
次のようなコマンドを発行して、無関係な .dyn ファイルが存在していないことを確認します。
例 |
---|
rm prof-dir \*.dyn |
次のようなコマンドを発行して、インストルメント済みファイルを実行します。
例 |
---|
myApp < data1 |
コマンドは、インストルメント済みアプリケーションを実行し、上記の -prof-dir で指定したディレクトリーに、拡張子 .dyn で 1 つ以上の新しい動的プロファイル情報ファイルを生成します。
次のようなコマンドを発行して、すべての .dyn ファイルを 1 つのファイルにマージします。
例 |
---|
profmerge -prof_dpi Test1.dpi |
profmerge ツールは、すべての .dyn ファイルを Test1 におけるアプリケーションの合計のプロファイル情報を表す 1 つのファイル (Test1.dpi) にマージします。
再度、次のようなコマンドを発行して、無関係な .dyn ファイルが存在していないことを確認します。
例 |
---|
rm prof-dir \*.dyn |
次のようなコマンドを発行して、インストルメント済みアプリケーションを実行し、上記の prof-dir で指定したディレクトリーに、拡張子 .dyn で 1 つ以上の新しい動的プロファイル情報ファイルを生成します。
例 |
---|
myApp < data2 |
次のようなコマンドを発行して、すべての .dyn ファイルを 1 つのファイルにマージします。
例 |
---|
profmerge -prof_dpi Test2.dpi |
このステップで、profmerge ツールは、すべての .dyn ファイルを、Test2 におけるアプリケーションの合計のプロファイル情報を表す 1 つのファイル (Test2.dpi) にマージします。
再度、次のようなコマンドを発行して、無関係な .dyn ファイルが存在していないことを確認します。
例 |
---|
rm prof-dir \*.dyn |
次のようなコマンドを発行して、インストルメント済みアプリケーションを実行し、上記の prof-dir で指定したディレクトリーに、拡張子 .dyn で 1 つ以上の新しい動的プロファイル情報ファイルを生成します。
例 |
---|
myApp < data3 |
次のようなコマンドを発行して、すべての .dyn ファイルを 1 つのファイルにマージします。
例 |
---|
profmerge -prof_dpi Test3.dpi |
このステップで、profmerge ツールは、すべての .dyn ファイルを、Test3 におけるアプリケーションの合計のプロファイル情報を表す 1 つのファイル (Test3.dpi) にマージします。
tests_list という名前で 3 行のファイルを作成します。1 行目に Test1.dpi、2 行目に Test2.dpi、3 行目に Test3.dpi と記述します。
ツールの使用例
これらのファイルが作成されたら、次の例で示すように、prof-dir ディレクトリーでコマンドラインからテスト・プライオリタイゼーション・ツールを起動できます。
次の例は、テスト実行の回数を最小限にする方法を示しています。
構文の例 |
---|
tselect -dpi_list tests_list -spi pgopti.spi |
-spi オプションは .spi ファイルへのパスを指定します。
次に、サンプル出力を示します。
サンプル出力 |
---|
Total number of tests = 3 Total block coverage ~ 52.17 Total function coverage ~ 50.00 num %RatCvrg %BlkCvrg %FncCvrg Test Name @ Options --- -------- -------- -------- ------------------- 1 87.50 45.65 37.50 Test3.dpi 2 100.50 52.17 50.00 Test2.dpi |
この例の結果では、次の情報を提供します。
3 つのテストすべてを実行して、52.17% のブロックカバレッジと 50.00% の関数カバレッジを達成した。
Test3 はアプリケーションの基本ブロックの 45.65% をカバーしている。これは 3 つのテストすべてで達成できる合計ブロックカバレッジの 87.50% である。
Test2 を追加することで、52.17% の累積ブロックカバレッジまたは Test1、Test2、Test3 の合計ブロックカバレッジの 100% を達成した。
Test1 を除去しても合計ブロックカバレッジに悪影響はない。
tests_list ファイルで、各テストの実行時間が次のように記述されていると仮定します。
サンプル出力 |
---|
Test1.dpi 00:00:60:35 Test2.dpi 00:00:10:15 Test3.dpi 00:00:30:45 |
次のコマンドは、-mintime オプションを渡して実行時間を最小限にします。
構文例 |
---|
tselect -dpi_list tests_list -spi pgopti.spi -mintime |
次に、サンプル出力を示します。
サンプル出力 |
---|
Total number of tests = 3 Total block coverage ~ 52.17 Total function coverage ~ 50.00 Total execution time = 1:41:35 num elaspedTime %RatCvrg %BlkCvrg %FncCvrg Test Name @ Options --- ----------- -------- -------- -------- ------------------- 1 10:15 75.00 39.13 25.00 Test2.dpi 2 41:00 100.00 52.17 50.00 Test3.dpi |
この例では、すべてのテストを続けて実行すると 1 時間 45 分 35 秒必要ですが、選択したテストを実行すると 41 分で同じ合計ブロックカバレッジを達成できることが示されています。
実行時間を最小限にするためのテストの順序 (最初に Test2、次に Test3) は、テストの数を最小限にするためのテストと異なることがあります。上記の例 1 (最初に Test3、次に Test2) を参照してください。例 2 では、Test2 が実行時間あたりのカバレッジが最も高くなるテストなので、Test2 が実行する最初のテストとして選択されます。
-cutoff オプションは、ツールが指定されたレベルの基本ブロックカバレッジに達した場合、ツールを終了します。次に、オプションの使用例を示します。
例 |
---|
tselect -dpi_list tests_list -spi pgopti.spi -cutoff 85.00 |
ツールが上記の例で 85.00 の cutoff 値で実行された場合、45.65% のブロックカバレッジを達成する Test3 のみが選択されます。これは 3 つのテストすべてで達する合計ブロックカバレッジの 87.50% に相当します。
ツールは、すべてのテストを実行して得られる合計カバレッジを決定するために、すべてのプロファイル情報を最初にマージします。-cutoff を使用すると、このステップはスキップされます。この場合、全体的なカバレッジは不明なまま、確実なカバレッジ情報のみがレポートされます。