ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

profile

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

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

構文

  • profile action
  • profile action option1 ... optionN
  • profile option1 ... optionN
  • p = profile('info')
  • s = profile('status')

説明

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

次の 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 -nohistory
s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'off'
        HistorySize: 1000000

関連する例

入力引数

すべて折りたたむ

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

オプション結果
on

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

off

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

resume

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

clear

記録された統計量を消去します。

viewer

プロファイラーを停止し、プロファイラー ウィンドウに結果を表示します。詳細は、「パフォーマンス改善のためのプロファイリング」を参照してください。

info

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

status

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

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

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

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

履歴オプション

オプション結果
-history

関数エントリおよび終了イベントを含む関数呼び出しを、順序どおりに記録します。既定の設定では、-history オプションは無効にされています。

-historysize integer

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

-nohistory

既定の設定。関数呼び出しの順序どおりの記録を無効にします。関数 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 でサポートされなくなりました。

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

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

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

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

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

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

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

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

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

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

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

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

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

FunctionHistory

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

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

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

ClockPrecision

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

ClockSpeed

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

Name

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

Overhead

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

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

フィールド

既定値

ProfilerStatus

'on' または 'off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

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

'performance'

HistoryTracking

'on' または 'off'

'off'

HistorySize

integer

1000000

詳細

すべて折りたたむ

ヒント

  • プロファイラー ユーザー インターフェイスを開くには、profile viewer 構文を使用するか、「パフォーマンスの向上のためのプロファイル」を参照してください。

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

R2006a より前に導入

この情報は役に立ちましたか?