Main Content

profile

関数実行時間のプロファイル

説明

プロファイラーを使用して実行時間を追跡します。MATLAB® コードの実行時間を把握しておくと、コードのデバッグと最適化に役立ちます。プロファイラーのユーザー インターフェイスの詳細については、プロファイラーを参照してください。

profile action は関数の実行時間をプロファイリングします。action を使用して、プロファイラーの開始、停止、再開およびプロファイル統計量の表示と消去を行います。たとえば、profile on はプロファイラーを開始します。

profile action option1 ... optionN は、指定したオプションを使用してプロファイラーの開始または再開を行います。たとえば、profile resume -history はプロファイラーを再開して関数呼び出しのシーケンスを記録します。

profile option1 ... optionN は、指定されたプロファイラー オプションを設定します。プロファイラーがオンの場合にいずれかのオプションを指定すると、MATLAB からエラーがスローされます。オプションを変更するには、まず profile off を指定してから、新しいオプションを指定してください。

p = profile('info') はプロファイラーを停止して、その結果を含む構造体を表示します。関数 profile で生成されたデータにアクセスするには、この構文を使用します。

s = profile('status') はプロファイラーのステータス情報を含む構造体を返します。

すべて折りたたむ

プロファイラーをオンにして、関数 magic を呼び出します。

profile on
n = 100;
M = magic(n);

プロファイラー ウィンドウで結果を確認します。

profile viewer

結果を HTML ファイルとして保存します。既定では、profsave は現在の作業フォルダー内の profile_results サブフォルダーにファイルを保存します。

profsave

プロファイラーをオンにして、関数 magic を呼び出します。

profile on
n = 100;
M = magic(n);

結果を MAT ファイルに保存します。

p = profile('info')
save myprofiledata p
p = 

      FunctionTable: [1x1 struct]
    FunctionHistory: [2x2 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0

次の main 関数とローカル関数を使用してファイル myFunction.m を作成します。

function c = myFunction(a,b)
c = sqrt(square(a)+square(b));
end

function y = square(x)
y = x.^2;
end

プロファイラーをオンにして、関数呼び出しの履歴オプションを有効にします。関数 myFunction の呼び出しをプロファイリングします。

profile on -history
a = rand(5);
b = rand(5);
c = myFunction(a,b);

プロファイリング結果を保存します。

p = profile('info')
p = 

      FunctionTable: [2x1 struct]
    FunctionHistory: [2x6 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0

関数呼び出しの履歴を表示します。

p.FunctionHistory
ans =

     0     0     1     0     1     1
     1     2     2     2     2     1

関数呼び出し履歴を反復して関数エントリと関数終了の情報を表示します。

numEvents = size(p.FunctionHistory,2);
for n = 1:numEvents
    name = p.FunctionTable(p.FunctionHistory(2,n)).FunctionName;
    
    if p.FunctionHistory(1,n) == 0
        disp(['Entered ' name]);
    else
        disp(['Exited ' name]);
    end
end
Entered myFunction
Entered myFunction>square
Exited myFunction>square
Entered myFunction>square
Exited myFunction>square
Exited myFunction

関数呼び出し履歴のオプションを既定の値に設定します。

profile -timestamp
s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'timestamp'
        HistorySize: 5000000

入力引数

すべて折りたたむ

プロファイラーの制御オプション。次のいずれかのオプションとして指定します。

オプション結果
on

前に記録したプロファイル統計量を消去し、プロファイラーを起動します。

off

プロファイラーを停止します。

clear

プロファイラーを停止し、記録された統計量を消去します。

viewer

プロファイラーを停止し、プロファイラー ウィンドウに結果を表示します。詳細については、プロファイラーを参照してください。プロファイラー ユーザー インターフェイスは MATLAB Online™ でサポートされていません。

info

プロファイラーを停止し、結果を含む構造体を返します。

resume前に記録した統計量を消去しないで、プロファイラーを再開します。
status

プロファイラーのステータス情報を含む構造体を返します。

1 つ以上のプロファイリング オプション。履歴オプションおよびクロック オプション テーブルの有効な設定を表す文字ベクトルとして指定します。

プロファイラーの設定で行った変更は、プロファイラーの停止や統計量の消去を行った後も維持されます。プロファイラーを既定の動作に戻すには、オプションを手動で既定値に戻すか、新しい MATLAB セッションを開始します。

履歴オプション

オプション結果
-nohistory

基本的なプロファイリング統計量を記録します。

-history

基本的なプロファイリング統計量だけでなく、関数エントリおよび終了イベントを含む関数呼び出しを順序どおりに記録します。

-timestamp

既定の値。基本的なプロファイリング統計量だけでなく、エントリおよび終了イベントを含む関数呼び出しを順序どおりに、および各イベントのタイムスタンプを記録します。

-historysize integer

記録する関数エントリおよび関数終了イベントの数を指定します。既定では historysize は 5,000,000 です。関数呼び出しの数が historysize の指定値を超える場合、関数 profile は、呼び出しシーケンス以外のプロファイリング統計量を引き続き記録します。

クロック オプション

オプション結果
-timer 'performance'

既定の値。パフォーマンス測定のためにオペレーティング システムで提供されるクロックの時計時間を使用します。

-timer 'processor'

プロセッサから直接提供される時計時間を使用します。省エネ設定や複数のプロセッサを使用している場合、測定値に影響することがあります。

-timer 'real'

オペレーティング システムから報告されるシステム時間を使用します。これは計算量が最も多くなる測定オプションで、プロファイリングするコードのパフォーマンスに最も大きく影響します。オペレーティング システム クロックの時刻を変更すると、測定結果に影響を与えます。

-timer 'cpu'

コンピューター時間を使用してすべてのスレッドの時間を合計します。この測定は、時計時間と異なります。たとえば、関数 pause のコンピューター時間は通常小さい値ですが、時計時間には実際に一時停止している時間が含まれるため、値が大きくなります。

出力引数

すべて折りたたむ

プロファイラー統計量。次のフィールドを含む構造体として返されます。

フィールド

説明

FunctionTable

関数統計量。構造体配列として返されます。配列の各構造体には、プロファイリングの実行中に呼び出された 1 つの関数またはローカル関数についての情報が含まれています。各構造体には以下のフィールドがあります。

  • CompleteNameFunctionName の絶対パス。

  • FunctionName – 関数の名前。ローカル関数の場合、FunctionName は main 関数になります。

  • FileNameFunctionName の絶対パス。ファイル拡張子を含みます。ローカル関数の場合、FileName は main 関数の絶対パスです。

  • Type – 関数の種類。たとえば、MATLAB 関数、MEX 関数、ローカル関数、入れ子関数などがあります。

  • NumCalls – プロファイリングされたコードがその関数を呼び出した回数。

  • TotalTime – 関数とその子関数の消費時間の合計。

  • TotalRecursiveTime – このフィールドは MATLAB でサポートされなくなりました。

  • Children – 関数が呼び出した関数に関する情報。配列の各エントリに 1 つの子関数についての情報が含まれます。構造体には次のフィールドがあります。

    • IndexFunctionTable 内で子関数の情報構造体を指すインデックス。

    • NumCalls – プロファイリングされたコードが子関数を呼び出した回数。

    • TotalTime – 子関数の合計消費時間。

  • ParentsFunctionName の親関数に関する情報。配列内の各構造体に、1 つの親関数についての情報が含まれます。構造体には次のフィールドがあります。

    • IndexFunctionTable 内で親関数の情報構造体を指すインデックス。

    • NumCalls – 親関数がこの関数を呼び出した回数。

  • ExecutedLines – プロファイリングされた関数について 1 行ごとの詳細を含む配列。

    • 列 1 – FileName で実行されたコード行の行番号。

    • 列 2 – プロファイリングされたコードがこのコード行を実行した回数。

    • 列 3 – このコード行の合計消費時間。列 3 のエントリの和が TotalTime に等しくなるとは限りません。

  • IsRecursive – 関数が再帰関数かどうかのインジケーター。値が 1 (true) の場合は再帰関数であることを示します。値が 0 (false) の場合は再帰関数でないことを示します。

  • PartialData – プロファイリング統計量が不完全かどうかを示すインジケーター。値が logical 1 (true) の場合、プロファイリング中に関数が変更されたことを示します。これはたとえば、関数を編集したり、メモリから消去した場合などです。その場合、プロファイラーは関数が編集される前のデータのみを収集します。

FunctionHistory

関数呼び出しの履歴。配列として返されます。

  • 行 1 – 関数エントリまたは関数終了のインジケーター。プロファイラーは関数エントリを 0、関数終了を 1 として記録します。

  • 行 2 – FunctionTable 内で関数情報の構造体を指すインデックス。

  • 行 3 – 関数エントリまたは関数終了のタイムスタンプの秒の部分。オペレーティング システムのエポック時間以降の経過時間として指定します。この行は、-timestamp 履歴オプションが指定されている場合にのみ返されます。

  • 行 4 – 関数エントリまたは関数終了のタイムスタンプのマイクロ秒の部分。オペレーティング システムのエポック時間以降の経過時間として指定します。この行は、-timestamp 履歴オプションが指定されている場合にのみ返されます。

ClockPrecision

関数 profile の時間測定精度。double として返されます。

ClockSpeed

CPU の予想クロック速度。double として返されます。

Name

プロファイラーの名前。文字配列として返されます。

Overhead

将来の使用のために予約されています。

プロファイラー ステータス。次のフィールドを含む構造体として返されます。

フィールド

既定値

ProfilerStatus

'on', 'off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

'performance''processor''cpu' または 'real'

'performance'

HistoryTracking

'on''off' または 'timestamp'

'timestamp'

HistorySize

整数

5000000

制限

  • MATLAB プロファイラーは、計算の実行とデータの収集をコードの実行中に行います。これには追加の演算リソースが必要であり、プロファイラーがアクティブな場合はアクティブでない場合に比べて同じコードの実行が遅くなります。そのため、プロファイラーで測定される実行時間は、コードのパフォーマンスの絶対尺度ではなく相対尺度として扱うようにしてください。

  • プロファイルされたコードが間接 (または相互) 再帰を使用する場合、プロファイラーから返される結果が正確でない可能性があります。再帰が直接再帰である (1 つの関数がその関数自体を呼び出している) 場合、プロファイラーはその関数に対する非再帰の呼び出しの合計時間を返します。プロファイルされたコード内の関数が再帰的 (直接または間接) であるかどうかを判定するには、FunctionTable エントリの IsRecursive フィールドの値を調べます。

  • プロファイラーはコード セクションの評価ではサポートされません。

ヒント

  • プロファイラー ユーザー インターフェイスを開くには、profile viewer 構文を使用するか、プロファイラーを参照してください。プロファイラー ユーザー インターフェイスは MATLAB Online でサポートされていません。

  • MATLAB R2015b 以降、既定のタイマーには 'performance' が使用されます。以前のバージョンの MATLAB では、既定のプロファイラー タイマーが実時間ではなく CPU 時間を測定する 'cpu' に設定されていました。

バージョン履歴

R2006a より前に導入