ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

profile

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

構文

profile on
profile -history
profile -nohistory
profile -history -historysize integer
profile -timer clock
profile -history -historysize integer -timer clock
profile off
profile resume
profile clear
profile viewer
S = profile('status')
stats = profile('info')

説明

関数 profile は、実行時間を調べることで、MATLAB® コード ファイルのデバッグや最適化を支援します。ファイル内の各 MATLAB 関数、MATLAB ローカル関数、または MEX 関数に対し、profile は実行時間、呼び出し回数、親関数、子関数、コード行ヒット回数、およびコード行の実行時間に関する情報を記録します。 子関数を見る目的のみに、profile を使うユーザーがいますが、その場合は、depfun を参照してください。プロファイラーのグラフィカル ユーザー インターフェイスを起動するには、構文 profile viewer を使用します。既定の設定では、プロファイラー時間は CPU 時間です。プロファイラーがレポートする総時間は、関数 tictoc を使用してレポートされる時間、およびストップウォッチを使って観測する時間と同じではありません。

profile on は、前に記録したプロファイル統計を消去し、プロファイラーを起動します。次の点には、注意してください。

  • profile on 構文に —history—historysize、および —timer のオプションのすべてまたは一部を指定することも、まったく指定しないことも可能です。

  • オプションは、on の前後を含み、任意の順序で指定できます。

  • プロファイラーが現在オンになっている場合に、オプションのいずれかを使用して profile を指定すると、MATLAB ソフトウェアによってエラー メッセージが返され、オプションは無視されます。たとえば、profile —timer real を指定した場合、MATLAB によって次のエラーが返されます: プロファイラーは既に起動されています。TIMER は変更できません。

  • オプションを変更するには、profile off を指定してから、新しいオプションと共に profile on または profile resume を指定します。

profile -history は、関数呼び出しの正確な順序を記録します。関数 profile は、既定の設定では最大 1,000,000 の関数エントリおよび終了イベントを記録できます。1,000,000 を超えるイベントに対して、関数 profile は、別のプロファイル統計の記録を続行しますが、連続的な呼び出しにはなりません。関数 profile が記録する関数エントリと終了イベントの数を変更するには、–historysize オプションを使用します。既定の設定では、history オプションは無効です。

profile -nohistory は、その後の履歴の記録 (関数呼び出しの正確な順序) を無効にします。-history オプションを事前に設定した後に、-nohistory オプションを使用してください。他のすべてのプロファイリング統計は、引き続き収集されます。

profile -history -historysize integer は、記録する関数エントリと終了イベントの数を指定します。既定の設定では、historysize は 1,000,000 に設定されています。

profile -timer clock は、使用する時間のタイプを指定します。clock に有効な値は以下のとおりです。

  • 'cpu'— プロファイラーは、計算時間を使用します (既定の設定)。

  • 'real'— プロファイラーは、時計時間を使用します。

たとえば、関数 pausecpu 時間は通常は短いですが、real 時間は一時停止した実時間も含めるため、長くなります。

profile -history -historysize integer -timer clock は、すべてのオプションを指定します。サブセットのように、どの順番でも適用できます。

profile off は、プロファイラーを中止します。

profile resume は、前に記録した統計量を消去しないで、プロファイルを再スタートします。

profile clear は、profile で記録した統計量を消去します。

profile viewer は、プロファイラーを中止し、プロファイラー ウィンドウに結果を表示します。詳細は、『デスクトップ ツールと開発環境』ドキュメンテーションの「パフォーマンスを改善するプロファイラー」を参照してください。

S = profile('status') は、現在のプロファイラーのステータスの情報をもつ構造体を返します。以下の表は、構造体に現れる順番でフィールドを表示します。

フィールド

既定値

ProfilerStatus

'on' または 'off'

off

DetailLevel

'mmex'

'mmex'

Timer

'cpu' または 'real'

'cpu'

HistoryTracking

'on' または 'off'

'off'

HistorySize

integer

1000000

stats = profile('info') は、結果を含む構造体を表示します。この関数を使用して、関数 profile が生成するデータにアクセスできます。以下の表は、構造体に現れる順番でフィールドを表示します。

フィールド

説明 

FunctionTable

呼び出された各関数の統計をもつ構造体配列

FunctionHistory

関数の呼び出し履歴を含む配列

ClockPrecision

関数 profile の時間測定の精度

ClockSpeed

CPU のクロック速度の推定値

Name

プロファイラー名

FunctionTable フィールドは、構造体配列で、各構造体は、実行中に呼び出される 1 つの関数またはローカル関数の情報をもちます。以下の表は、構造体に現れる順番でこれらのフィールドを表示します。

フィールド

説明 

CompleteName

ローカル関数を含む FunctionName の絶対パスです。

FunctionName

ローカル関数を含む関数名

FileName

ファイル拡張子を含む FunctionName の絶対パス。ローカル関数は含まれない

Type

MATLAB 関数、MEX 関数、およびその他多くのタイプの関数 (MATLAB ローカル関数、入れ子関数、無名関数を含む)

NumCalls

関数が呼び出された回数

TotalTime

関数とその子関数の消費時間の合計

TotalRecursiveTime

サポート終了。

Children

子関数への FunctionTable インデックス

Parents

親関数への FunctionTable インデックス

ExecutedLines

プロファイルされる関数の詳細を行ごとに含む配列です。

1 列目:実行された行数です。行が実行されなかった場合は、この行列には現れません。

2 列目:行が実行された回数です。

3 列目:その行に費やした時間です。メモ:3 列目の要素の和は、関数の TotalTime に必ずしも追加する必要はありません。

IsRecursive

BOOLEAN 値。再帰的な場合は論理値 1 (true) 、それ以外は 0 (false)

PartialData

BOOLEAN 値。たとえば編集や消去など、プロファイル中に関数が変更された場合は、論理値 1 (true) です。この場合、データは関数が変更された時点までしか集められません。

プロファイル、結果の表示、および HTML としてのプロファイル データの保存

この例は、MATLAB の magic コマンドをプロファイルし、プロファイラー ウィンドウに結果を表示します。この例は、HTML 表示のベースとなるプロファイル データを取り出し、profsave コマンドを使用して HTML 形式のプロファイル データを保存します。

profile on
plot(magic(35))
profile viewer
p = profile('info');
profsave(p,'profile_results')

プロファイル、MAT ファイルへのプロファイル データの保存、および結果の表示

プロファイル データを保存するもう 1 つの方法は、MAT ファイルに蓄積する方法です。この例は、プロファイル データを MAT ファイルに保存し、メモリからプロファイル データを消去し、そして MAT ファイルからプロファイル データを読み込みます。この例は、再読み込みされたデータを、静的な HTML ページではなく、プロファイル データであるように、プロファイラー グラフィカル インターフェイスへ取り込む方法も示します。

p = profile('info');
save myprofiledata p
clear p
load myprofiledata
profview(0,p)

プロファイルと、履歴を含めて結果の表示

この例は、history オプションが有効な場合に、プロファイルの結果を表示する効果的な方法を説明します。履歴データは、実行中に実行および終了された関数の順番を表します。profile コマンドは、返される構造体の FunctionHistory フィールドに履歴データを返します。履歴データは、2 行 n 列の配列です。1 行目は論理値を含み、0 は関数に入ることを意味し、1 は 関数から出ることを意味します。2 行目は、FunctionTable フィールドのインデックスによって、入力または出力された関数を識別します。この例は、履歴データを読み込み、MATLAB コマンド ウィンドウに表示します。

profile on -history
plot(magic(4));
p = profile('info');

for n = 1:size(p.FunctionHistory,2)
 if p.FunctionHistory(1,n)==0
        str = 'entering function: ';
 else
        str = 'exiting function: ';
 end
 disp([str p.FunctionTable(p.FunctionHistory(2,n)).FunctionName])
end

参考

| | |

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