Main Content

コードのパフォーマンスの測定

パフォーマンス タイミング関数の概要

関数 timeit とストップウォッチ タイマー関数 tic および toc を使用すると、コードの実行時間を計測できます。関数の実行時間の厳密な測定には、関数 timeit を使用します。関数全体ではなく、比較的小さなコード セクションの実行時間を推定するには、tic および toc を使用します。

関数呼び出しの情報や個々のコード行の実行時間など、コードのパフォーマンスについての追加の詳細については、MATLAB® プロファイラーを使用します。詳細は、パフォーマンス向上のためのコードのプロファイリングを参照してください。

時間関数

ある関数を実行するために必要な時間を測定するには、関数 timeit を使用します。関数 timeit は、指定した関数を複数回呼び出し、測定の中央値を返します。この関数は、測定される関数のハンドルを受け取り、標準的な実行時間 (秒) を返します。たとえば、ワークスペースで定義されている 2 つの入力 xy を受け取る関数 computeFunction を定義したとします。timeit を使用して、この関数の実行時間を計算することができます。

f = @() myComputeFunction(x,y); % handle to function
timeit(f)

コードの一部の実行時間の測定

プログラムの一部の実行時間を推定したり、プログラムの一部にさまざまな変更を加えた場合の処理スピードを比較するには、ストップウォッチ タイマー関数 tictoc を使用します。tic を呼び出すとタイマーが開始され、次に toc で経過時間が読み取られます。

tic
   % The program section to time. 
toc

場合によっては、プログラムの実行が速すぎて tictoc では有効なデータを取得できない場合があります。コードの実行が 1/10 秒より速い場合は、コードをループ内で実行して測定し、次に平均を算出して 1 回の実行時間を求めることを検討してください。

関数 cputime と関数 tic/toc と timeit

timeit、または tictoc を使用して、コードのパフォーマンスを測定することをお勧めします。これらの関数は、時計時間を返します。tic および toc とは異なり、関数 timeit はコードを複数回呼び出すため、初期コストを考慮します。

関数 cputime は、総 CPU 時間を測定し、すべてのスレッド間で合計します。この測定値は、timeit または tic/toc が返す時計時間とは異なるため、誤解を招く場合があります。以下に例を示します。

  • 関数 pause の CPU 時間は通常短いですが、時計時間では MATLAB の実行が一時停止された実際の時間が考慮されます。そのため、時計時間の方が長くなる場合があります。

  • 関数が 4 つの処理コアを均等に使用している場合、CPU 時間は、時計時間の約 4 倍多くなります。

パフォーマンス測定時のヒント

コードのパフォーマンスを測定する場合、以下のヒントを考慮してください。

  • 時間測定を行うのに有効なコード部分を使用する。時間を測定するコードは、その実行時間が 1/10 秒を上回るのが理想的です。

  • コマンド ラインまたはスクリプト内で時間を測定する代わりに、測定するコードを関数内に配置する。

  • 初期コストを測定する場合を除き、コードを複数回実行する。関数 timeit を使用する。

  • パフォーマンスの測定時には、clear all を使用しない。詳細は、関数 clear を参照してください。

  • 出力を既定の ans にせず、変数に代入する。

参考

| | |

関連するトピック