インテル® コンパイラのテスト・プライオリタイゼーション・ツールを使用すると、以前のアプリケーション実行プロファイルを基にアプリケーション・テストの選択と重要度付けを行う、プロファイルに基づく最適化を行うことができます。ツールは、テストがボトルネックとなる大規模なアプリケーションのテストと開発にかかる時間を大幅に節約します。ツールは、IA-32 アーキテクチャと Itanium® アーキテクチャの両方で使用することができます。
ツールは、アプリケーションのコードのサブセットに対して最も適切なテストを選択し、重要度付けを行います。アプリケーションの特定のモジュールが変更された場合、テスト・プライオリタイゼーション・ツールはその変更によって最も影響を受けるテストを知らせます。ツールは、以前に実行されたアプリケーションのプロファイル・データを分析して、アプリケーションのコンポーネントとテストの依存性を確認し、この情報を基にテストのプロセスをガイドします。
ツールは、アプリケーションのコード・カバレッジを基に、効率的なテスト階層を示します。ツールを使用する利点は、次のように要約することができます:
アプリケーションの任意のサブセットで全体をカバーするために必要なテストの数を最小限にする。ツールはテストの全セットと全く同じコード・カバレッジを達成するアプリケーション・テストの最小サブセットを定義します。
テストのターンアラウンド時間を短くする。長い時間を費して多くの失敗を見つける代わりに、ユーザは、セットの変更によって問題が発生する少数のテストを素早く見つけることができます。
テストの実行時間のデータを基に、最短時間で特定のレベルのコード・カバレッジを達成するテストを選択して重要度付けを行います。
このツールの構文は次のとおりです。
tselect -dpi_list file
-dpi_list は必須のツール・オプションで、重要度付けが必要なテストの .dpi ファイルのリストを含む DPI リストファイル (file) へのパスを設定します。
次の表は、ツールが使用するオプションの一覧です。
アプリケーションのテストでテスト・プライオリタイゼーション・ツールを実行するには、次のファイルが必要です:
インテル・コンパイラでインストルメント済みバイナリ用に -prof_genx オプション付きでアプリケーションをコンパイルしたときに生成される .spi ファイル。
インテル・コンパイラの profmerge ツールで各アプリケーション・テストの動的プロファイル情報ファイル (.dyn) をマージして生成される .dpi ファイル。ユーザは、個々のテスト用に生成されたすべての .dyn ファイルに profmerge ツールを適用して、テストを一意に識別できるように .dpi ファイルに名前を付ける必要があります。profmerge ツールは指定されたディレクトリに存在するすべての .dyn ファイルをマージします。
注
以前に実行した、または他のテストで使用した、無関係な .dyn ファイルがディレクトリ中に含まれていないことを確認することは非常に重要です。この確認を怠ると、プロファイル情報は不適切なプロファイル・データに基づくことになります。その結果、不適切なカバレッジ情報が生成され、最適化されたコードのパフォーマンスに悪影響を与えることがあります。
重要度付けするテストのリストを含む、ユーザが作成したファイル。
ツールを正しく実行するには、次の操作を行ってください:
各テストが一意に識別できるように、各テスト .dpi ファイルに名前を付けます。
DPI リストファイル (すべての .dpi テストファイルの名前を記述したテキストファイル) を作成します。このファイルの名前がテスト・プライオリタイゼーション・ツールの実行コマンドの入力になります。DPI リストファイルの各行には、1 つの .dpi ファイル名のみを記述するようにしてください。オプションで、ファイル名に続けてテストの実行時間を dd:hh:mm:ss 形式で記述することができます。
例: Test1.dpi 00:00:60:35 は、Test1 が (0 日 0 時間) 60 分 35 秒実行されたことを示します。
実行時間の記述はオプションです。しかし、実行時間が記述されていない場合、ツールは実行時間を最小限にするテストの重要度付けを行いません。テストの数を最小限にする重要度付けのみを行います。
次の図は、テスト・プライオリタイゼーション・ツールの使用モデルを示しています。
IA-32 システム用の簡単な例 (myApp.f90) について順に説明します。
次のように設定します:
PROF_DIR=c:/myApp/prof_dir
次のコマンドを使用します:
ifort -prof_genx myApp.f90
このコマンドは、プログラムをコンパイルして、インストルメント済みバイナリ myApp と静的プロファイル情報ファイル pgopti.spi を生成します。
次のコマンドを使用します:
rm PROF_DIR /*.dyn
関係しない .dyn ファイルを削除します。
次のコマンドを使用します:
myApp < data1
このコマンドは、インストルメント済みアプリケーションを実行して、PROF_DIR で指定されたディレクトリに拡張子 .dyn で 1 つ以上の新規動的プロファイル情報ファイルを生成します。
次のコマンドを使用します:
profmerge -prof_dpi Test1.dpi
このステップで、profmerge ツールは、すべての .dyn ファイルを、Test1 におけるアプリケーションの合計のプロファイル情報を表わす 1 つのファイル (Test1.dpi) にマージします。
次のコマンドを使用します:
rm PROF_DIR /*.dyn
関係しない .dyn ファイルを削除します。
次のコマンドを使用します:
myApp < data2
このコマンドは、インストルメント済みアプリケーションを実行して、PROF_DIR で指定されたディレクトリに拡張子 .dyn で 1 つ以上の新規動的プロファイル情報ファイルを生成します。
次のコマンドを使用します:
profmerge -prof_dpi Test2.dpi
このステップで、profmerge ツールは、すべての .dyn ファイルを、Test2 におけるアプリケーションの合計のプロファイル情報を表わす 1 つのファイル (Test2.dpi) にマージします。
次のコマンドを使用します:
rm PROF_DIR /*.dyn
関係しない .dyn ファイルを削除します。
次のコマンドを使用します:
myApp < data3
このコマンドは、インストルメント済みアプリケーションを実行して、PROF_DIR で指定されたディレクトリに拡張子 .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.00 |
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 を除去しても合計ブロック・カバレッジに悪影響はない。
例 2 実行時間を最小限にする
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 |
elapsedTime |
%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 は実行時間あたりのカバレッジが最も高くなるテストです。このため、最初のテストとして選択されます。
-cutoff オプションは、テスト・プライオリタイゼーション・ツールが指定されたレベルの基本ブロック・カバレッジに達した場合、ツールを終了します。
tselect -dpi_list tests_list -spi pgopti.spi -cutoff 85.00
ツールが上記の例で 85.00 の cutoff 値で実行された場合、45.65% のブロック・カバレッジを達成する Test3 のみが選択されます。これは 3 つのテストすべてで達する合計ブロック・カバレッジの 87.50% に相当します。
テスト・プライオリタイゼーション・ツールは、すべてのテストを実行して得られる合計カバレッジを決定するために、すべてのプロファイル情報を最初にマージします。-nototal オプション このステップはスキップされます。この場合、全体的なカバレッジは不明なまま、確実なカバレッジ情報のみがレポートされます。