コードのパフォーマンスの測定
パフォーマンス タイミング関数の概要
関数 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にせず、変数に代入する。