ドキュメンテーション

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

パフォーマンス改善のためのプロファイリング

プロファイリングとは

プロファイリングとは、プログラムが時間を消費する場所を測定する方法です。最も多くの時間を消費している関数を特定し、パフォーマンスを改善できる可能性がないか評価できます。また、コードをデバッグ ツールとしてプロファイリングできます。たとえば、MATLAB® が実行しないコード行を特定すると、そのコードを実行するテスト ケースの開発に役立ちます。プロファイリング時にファイルでエラーが発生すれば、何が実行され、何が実行されなかったかを知ることができ、問題を分離するうえで役立ちます。

    ヒント:   コードの最適化を急ぎ過ぎると、パフォーマンスを著しく向上させることなく、不必要にコードが複雑になる場合があります。最初の実装は可能な限り簡単にしてください。その後で、速度が問題である場合は、プロファイリングを使ってボトルネックを同定します。

MATLAB プロファイラーを使用してコードをプロファイリングできます。プロファイラーは、関数 profile で返される結果に基づいたユーザー インターフェイスです。並列して実行するコードをプロファイリングしている場合は、最良の結果を得られるよう Parallel Computing Toolbox™ の並列プロファイラーを使用してください。詳細は、「並列コードのプロファイル」を参照してください。

プロファイリング手順とガイドライン

以下の一般的なプロセスを使用してコードのパフォーマンスを改善します。

  1. コードに対してプロファイラーを実行します。

  2. プロファイル概要レポートで、非常に時間を要した関数または最も頻繁に呼び出された関数を検索します。

  3. それらの関数のプロファイル詳細レポートを表示し、最も時間のかかったコード行または最も頻繁に呼び出されたコード行を検索します。

    最初の詳細レポートのコピーを、比較するための参照として保存することを検討してください。コードを変更した後、プロファイラーを再度実行してレポートを比較できます。

  4. 該当するコード行を変更して、パフォーマンスを改善できるかどうかを判定します。

    たとえば、ループ内に load ステートメントがある場合、load ステートメントが 1 回だけ呼び出されるようにループの外に移動することが可能な場合もあります。

  5. パフォーマンスを向上できる可能性のある改善策をコードに実装します。ファイルを保存し、clear all を実行します。プロファイラーを再度実行して、元のレポート結果と比較します。

    まったく同じコードを 2 回プロファイリングする場合でも、コードに依存しない固有の時間変動のため、それぞれの結果がわずかに異なる場合があります。

  6. コードのパフォーマンスをさらに向上させるには、これらの手順を繰り返します。

コードがほとんどの時間を少数の組み込み関数の呼び出しに使っている場合は、おそらくコードは可能な限り最適化されています。

プロファイラーの使い方

MATLAB コード ファイルまたは 1 行のコードをプロファイリングするには、次の操作を実行します。

  1. 次のいずれかの方法を使用してプロファイラーを開きます。

    • コマンド ウィンドウで "profile viewer" と入力します。

    • [ホーム] タブの [コード] セクションで、 [実行および時間の計測] をクリックします。

    • エディターで、[エディター] タブの [実行] セクションで、 [実行および時間の計測] をクリックします。この方法を使用すると、プロファイラーは自動的に現在の [エディター] タブ内のコードをプロファイリングします。そのコードがプロファイリング対象のコードであれば、手順 4 に進みます。

  2. [このコードを実行] フィールドに、実行するステートメントを入力します。

    たとえば、MATLAB で提供されている Lotka-Volterra 例を実行できます。

    [t,y] = ode23('lotka',[0 2],[20;20])

    現在の MATLAB セッションで既にプロファイリングしたステートメントを [このコードを実行] リストから選択します。MATLAB によりコードのプロファイリングが自動的に開始され、手順 4 に進むことができます。

  3. [プロファイル開始] をクリックします。

    プロファイラーを実行中、[プロファイル時間] インジケーターは緑色で表示され、レポート秒数が増えていきます。[プロファイル時間] インジケーターは、プロファイラー ウィンドウの右上に表示されます。

    プロファイラーが終了すると、[プロファイル時間] インジケーターは黒になり、プロファイラーの実行時間が表示されます。プロファイルしたステートメントの結果は、コマンド ウィンドウで実行したように表示されます。

    この時間は、ステートメントの実行にかかった実際の時間ではありません。これは [プロファイル開始] をクリックしてからプロファイリングが停止するまでに経過した時間です。レポートされた時間が予想と大きく異なる場合、たとえば簡単なステートメントに対して数百秒異なる場合は、プロファイリングが必要以上に長く実行された可能性があります。この時間はプロファイル概要レポートの統計で報告された時間と一致しません。この統計は、既定では performance クロック時間に基づいています。プロファイルの統計を異なるタイプのクロックを使用して表示するには、プロファイラーではなく関数 profile を使用してください。

  4. プロファイリングが終了すると、プロファイラー ウィンドウにプロファイル概要レポートが表示されます。詳細は、プロファイル概要レポートを参照してください。

コマンド ウィンドウでの複数ステートメントのプロファイリング

複数のステートメントをプロファイリングするには、次の操作を実行します。

  1. プロファイラーの [プロファイル開始] をクリックします。[このコードを実行] フィールドにコードが表示されないことを確認します。

  2. コマンド ウィンドウにプロファイリングするステートメントを入力し、実行します。

  3. ステートメントをすべて実行したら、プロファイラーの [プロファイル停止] をクリックし、プロファイル概要レポートを表示します。

ユーザー インターフェイスのプロファイリング

Signal Processing Toolbox™ に含まれるフィルターの設計と解析ツールなどのユーザー インターフェイスにもプロファイラーを実行できます。または、GUIDE を使用して作成したインターフェイスなどもプロファイリングできます。

ユーザー インターフェイスをプロファイリングするには、次のようにします。

  1. プロファイラーの [プロファイル開始] をクリックします。[このコードを実行] フィールドにコードが表示されないことを確認します。

  2. ユーザー インターフェイスを起動します。

  3. インターフェイスを使用します。作業が終了したら、プロファイラーの [プロファイル停止] をクリックし、プロファイル概要レポートを表示します。

    メモ:   ユーザー インターフェイスの起動プロセスをプロファイルから除外するには、手順 1 と 2 を逆にします。つまり、ユーザー インターフェイスを起動してから [プロファイル開始] をクリックします。

プロファイル概要レポート

概要レポートには、実行全体に関する統計が表示され、呼び出された各関数の統計概要が出力されます。次の図は、Lotka-Volterra モデルのプロファイル概要レポートのイメージです。プロファイラーの使い方を参照してください。

プロファイル概要レポートには以下の情報が表示されます。

説明
関数名

プロファイリングされたコードによって呼び出されるすべての関数の一覧。最初は、関数は処理時間の長い順にリストされます。

呼び出し

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

合計時間

アクセスされたすべての子関数を含む、関数に消費した合計時間 (秒単位)。この時間は、子関数に消費した時間を含みます。プロファイラー自体もある程度時間を消費し、それも結果に含まれています。実行時間が非常に短いファイルの合計時間は 0 になる場合があります。

自己時間

子関数に消費した時間を除く、関数に消費した合計時間 (秒単位)。自己時間はプロファイラーのプロセスのオーバーヘッドもある程度含みます。

合計時間プロット

合計時間と比較した自己時間のグラフィックス表示。

概要レポートでは、以下の作業を実行できます。

  • [印刷] ボタン をクリックしてレポートを印刷する。

  • [関数名] 列の関数名をクリックして、特定の関数の詳細情報を取得する。詳細は、プロファイル詳細レポートを参照してください。

  • 列の名前をクリックして特定の列で並べ替える。たとえば、[関数名] リンクをクリックして関数をアルファベット順に並べ替えます。最初は、結果は [合計時間] 列の順序で表示されています。

プロファイル詳細レポート

プロファイル詳細レポートには、プロファイリング中に MATLAB が呼び出した関数のプロファイリング結果が表示されます。

プロファイル詳細レポートを開くには、プロファイル概要レポートの関数名をクリックします。プロファイル詳細レポートからプロファイル概要レポートに戻るには、プロファイル ウィンドウのツール バーで をクリックします。

プロファイル詳細レポートのヘッダーには以下の情報が含まれます。

  • プロファイリングされた関数の名前

  • プロファイリングされた関数を親関数が呼び出した回数

  • プロファイリングされた関数での消費時間

  • 関数を既定のエディターで開くためのリンク

  • レポートを別のウィンドウにコピーするためのリンク。レポートのコピーを保存しておくと、ファイルの変更時に関数への変更が与える影響を比較するのに役立ちます。

プロファイル詳細レポートに含めるセクションを指定するには、レポート上部のチェック ボックスを選択し、[更新] ボタンをクリックします。チェック ボックスを使用して以下のオプションから選択します。

表示オプション詳細
親関数を表示

親関数に関する情報を、親関数の詳細レポートへのリンクと共に表示します。親関数のプロファイル詳細レポートを開くには、関数の名前をクリックします。

時間のかかる行を表示

プロファイリングされた関数の中で、処理時間の最も長かった行をリストします。

子関数の表示

プロファイリングされた関数によって呼び出されたすべての関数をリストします。子関数のプロファイル詳細レポートを開くには、関数の名前をクリックします。

コード アナライザー結果の表示

プロファイリングされた関数の問題と潜在的な改善点に関する情報を表示します。

ファイル カバレッジを表示

プロファイリング中に MATLAB が実行した関数のコード行に関する統計を表示します。

関数リストを表示

関数のソース コードが MATLAB コード ファイルの場合はそのソース コードを表示します。

コードの各行について、[関数リスト] には次の列が含まれます。

  • コードの各行の実行時間

  • MATLAB がそのコード行を実行した回数

  • 行番号

  • 関数のソース コード。テキストの色は次の内容を表します。

    • 緑 — コメント行

    • 黒 — 実行されたコード行

    • グレー — 実行されなかったコード行

プロファイル詳細レポートでは、既定で、実行時間が最も長くかかったコード行が強調表示されます。強調色が濃いほどコード行の実行時間が長くなります。強調表示の条件を変更するには、[次の条件のコードを色で強調表示] ドロップダウン リストを使用します。

参考

詳細

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