コードのパフォーマンスの測定
パフォーマンス タイミング関数の概要
関数 timeit
とストップウォッチ タイマー関数 tic
および toc
を使用すると、コードの実行時間を計測できます。関数の実行時間の厳密な測定には、関数 timeit
を使用します。関数全体ではなく、比較的小さなコード セクションの実行時間を推定するには、tic
および toc
を使用します。
関数呼び出しの情報や個々のコード行の実行時間など、コードのパフォーマンスについての追加の詳細については、MATLAB® プロファイラーを使用します。詳細は、パフォーマンス向上のためのコードのプロファイリングを参照してください。
時間関数
ある関数を実行するために必要な時間を測定するには、関数 timeit
を使用します。関数 timeit
は、指定した関数を複数回呼び出し、測定の中央値を返します。この関数は、測定される関数のハンドルを受け取り、標準的な実行時間 (秒) を返します。たとえば、ワークスペースで定義されている 2 つの入力 x
と y
を受け取る関数 computeFunction
を定義したとします。timeit
を使用して、この関数の実行時間を計算することができます。
f = @() myComputeFunction(x,y); % handle to function
timeit(f)
コードの一部の実行時間の測定
プログラムの一部の実行時間を推定したり、プログラムの一部にさまざまな変更を加えた場合の処理スピードを比較するには、ストップウォッチ タイマー関数 tic
と toc
を使用します。tic
を呼び出すとタイマーが開始され、次に toc
で経過時間が読み取られます。
tic
% The program section to time.
toc
場合によっては、プログラムの実行が速すぎて tic
と toc
では有効なデータを取得できない場合があります。コードの実行が 1/10 秒より速い場合は、コードをループ内で実行して測定し、次に平均を算出して 1 回の実行時間を求めることを検討してください。
関数 cputime と関数 tic/toc と timeit
timeit
、または tic
と toc
を使用して、コードのパフォーマンスを測定することをお勧めします。これらの関数は、時計時間を返します。tic
および toc
とは異なり、関数 timeit
はコードを複数回呼び出すため、初期コストを考慮します。
関数 cputime
は、総 CPU 時間を測定し、すべてのスレッド間で合計します。この測定値は、timeit
または tic
/toc
が返す時計時間とは異なるため、誤解を招く場合があります。以下に例を示します。
関数
pause
の CPU 時間は通常短いですが、時計時間では MATLAB の実行が一時停止された実際の時間が考慮されます。そのため、時計時間の方が長くなる場合があります。関数が 4 つの処理コアを均等に使用している場合、CPU 時間は、時計時間の約 4 倍多くなります。
パフォーマンス測定時のヒント
コードのパフォーマンスを測定する場合、以下のヒントを考慮してください。
時間測定を行うのに有効なコード部分を使用する。時間を測定するコードは、その実行時間が 1/10 秒を上回るのが理想的です。
コマンド ラインまたはスクリプト内で時間を測定する代わりに、測定するコードを関数内に配置する。
初期コストを測定する場合を除き、コードを複数回実行する。関数
timeit
を使用する。パフォーマンスの測定時には、
clear all
を使用しない。詳細は、関数clear
を参照してください。出力を既定の
ans
にせず、変数に代入する。