アプリケーションのパフォーマンスに関する情報収集は、アプリケーションの時間測定から開始することができます。パフォーマンス解析ツールを使用することで、より高度で役立つデータを収集できます。
アプリケーションの時間測定は、パフォーマンス測定の 1 つの目安となります。次の点を考慮して行ってください。
ユーザーが誰もアクティブではないときに、プログラムの時間測定を行います。時間測定中、1 つまたは複数の CPU 集中型プロセスが起動していると、結果に影響します。
最も正確な結果を得るには、毎回、同じ条件でプログラムを実行するようにしてください。特に、同一プログラムの以前のバージョンと比較する際は注意してください。可能ならば、同じシステム (プロセッサー・モデル、メモリー、オペレーティング・システムのバージョンなど) で実行してください。
システムを変更する必要がある場合、両方のシステムでプログラムの同一バージョンの速度を測ります。こうすることによって、システムによる速度の違いを把握できます。
数秒以下で実行されるプログラムの場合は、数回測定し、正しい結果であることを確認してください。ライブラリーをロードするような一部のオーバーヘッドのある関数は、短い時間に大きな影響を与えます。
プログラムが多くのテキストを表示する場合、プログラムの出力をリダイレクトすることを考慮してください。プログラムの出力をリダイレクトすると、画面 I/O が減少するため、レポートされる時間が変わります。
システム時間が大きい場合は、I/O に多くの時間がかかっている可能性があります。この場合、調査する必要があります。
数秒以下で実行されるプログラムの場合は、数回測定し、正しい結果であることを確認してください。共有ライブラリーをロードするようなオーバーヘッドのあるプログラムは、短い時間に大きな影響を与えます。
time コマンドを使用して、実行プログラムの名前を指定すると、次の情報が得られます。
経過時間、実時間、または "ウォールクロック" 時間。これらは、合計 CPU 使用実時間よりも大きくなります。
CPU 使用実時間。システム、ユーザー実行の両方が表示されます。合計 CPU 使用実時間は、実際のユーザー CPU 時間とシステム CPU 時間の合計です。
アプリケーションの時間を測定する場合、.BAT ファイルで TIME コマンド (または関数の時間測定プロファイリング・オプション) を使用します。プログラム内からルーチンを呼び出すようにプログラムを変更し、実行時間を測定することもできます (条件付きでコンパイルされる行を使用)。
次に例を示します。
SECNDS、CPU_TIME、SYSTEM_CLOCK、TIME、および DATE_AND_TIME などのインテル® Fortran 組み込みプロシージャー。
DCLOCK、ETIME、SECNDS または TIME などの移植ライブラリー・ルーチン。
アプリケーションを実際に使用するシステムとできるだけ同じシステム上で、詳細なパフォーマンス解析を行ってください。
次のプログラム・テンプレートは、.BAT ファイルにより実行でき、プログラム実行の前後に TIME コマンドを発行することで、プログラム全体の実行におけるウォールクロック概算時間を測定することができます。Fortran の組み込み関数 CPU_TIME は、プログラムの指定した箇所で使用することで、測定開始時と終了時から CPU 時間を収集することができます。
例 |
---|
REAL time_begin, time_end ... CALL CPU_TIME ( time_begin ) ! !task to be timed ! CALL CPU_TIME ( time_end ) PRINT *, 'Time of operation was ', & time_end - time_begin, ' seconds' |
Linux* における考慮事項
次の時間測定の例では、サンプルプログラムは、次のような行を表示します。
Bourne* シェルの例 |
---|
Average of all the numbers is: 4368488960.000000 |
Bourne シェルを使用して、次のプログラム時間測定を行うと、合計 CPU 実時間が 1.19 秒 (ユーザープログラムの CPU 実時間 0.61 秒とシステムの CPU 実時間 0.58 秒の合計)、経過時間が 2.46 秒であることがレポートされます。
Bourne* シェルの例 |
---|
$ time a.out Average of all the numbers is: 4368488960.000000 real 0m2.46s user 0m0.61s sys 0m0.58s |
C シェルを使用すると、合計 CPU 実時間が 1.19 秒 (ユーザープログラムの CPU 実時間 0.61 秒とシステムの CPU 実時間 0.58 秒の合計)、経過時間が 4 秒 (0:04)、CPU 使用時間が 28% であることがレポートされます。
C シェルの例 |
---|
% time a.out Average of all the numbers is: 4368488960.000000 0.61u 0.58s 0:04 28% 78+424k 9+5io 0pf+0w |
bash シェルを使用すると、合計 CPU 実時間が 1.19 秒 (ユーザープログラムの CPU 実時間 0.61 秒とシステムの CPU 実時間 0.58 秒の合計)、経過時間が 2.46 秒であることがレポートされます。
bash シェルの例 |
---|
[user@system user]$ time ./a.out Average of all the numbers is: 4368488960.000000 elapsed 0m2.46s user 0m0.61s sys 0m0.58s |
システム時間が大きい場合は、I/O に多くの時間がかかっている可能性があります。この場合、調査する必要があります。
プログラムが多くのテキストを表示する場合は、time コマンドラインでプログラムからの出力をリダイレクトできます。プログラムの出力をリダイレクトすると、画面 I/O が減少するため、レポートされる時間が変わります。
詳細は、「time(1)」を参照してください。
time コマンドに加えて、実行時間を測定するためのルーチンを呼び出すようにプログラムを変更してみてください。例えば、SECNDS、DCLOCK、CPU_TIME、SYSTEM_CLOCK、TIME および DATE_AND_TIME などのインテル組み込みプロシージャーを使用できます。
© 1996-2010 Intel Corporation. 無断での引用、転載を禁じます。