生成コードの実行時間プロファイルの作成
生成コード内のタスクおよび関数に対する実行時間メトリクスを生成するように、ソフトウェアインザループ (SIL)、プロセッサインザループ (PIL)、または XCP ベースのエクスターナル モードのシミュレーションを構成できます。実行時間は、ターゲット アプリケーションまたはテスト対象の生成コードに追加されたコード インストルメンテーションを介して取得されるデータから計算されます。実行時間メトリクスを使用して、生成されたコードがターゲット ハードウェアへのリアルタイム展開のための要件を満たしているかどうかを判別できます。
たとえば、次の解析を実行できます。
最も時間を要するタスクを特定します。タスクは、生成されたコードへのメイン エントリ ポイントです。たとえば、サンプル レートのステップ関数や
関数などです。model_initialize該当するタスクにおいて、最も時間を要するコード セクションを調査します。
タイム ステップ全体での実行時間の変動を特定します。
実行時間を短縮しようとしている場合、解析結果は、最も重要なコード セクションに集中するのに役立ちます。更新されたモデルのパフォーマンスの変化を確認するには、SIL、PIL、またはエクスターナル モードのシミュレーションを再実行し、新しいメトリクスを以前のメトリクスと比較します。
SIL、PIL、またはエクスターナル モードのシミュレーションが完了したら、以下を行うことができます。
表示パネル、レポート、または [コード] ビューで実行時間メトリクスを確認する。
シミュレーション データ インスペクターを使用して、シミュレーション全体における実行時間の変動を表示および比較する。
MATLAB® 環境内で測定を解析する。
実行時間プロファイリングの構成
次の表に、生成されたコードの実行プロファイリングでサポートされているシステム ターゲット ファイルをリストします。
| シミュレーション モード | システム ターゲット ファイル |
|---|---|
SIL または PIL | GRT、ERT、または ERT ベース |
XCP ベースのエクスターナル | ERT または ERT ベース |
SIL、PIL、または XCP ベースのエクスターナル モードのシミュレーションのコード実行プロファイリングを構成するには、次のようにします。
最上位モデルで、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[タスク実行時間を計測する] チェック ボックスをオンにします。
関数の実行時間については、[関数の実行時間を計測する] ドロップダウン リストから次のいずれかのオプションを選択します。
概略 (参照モデルおよびサブシステムのみ)— 主要なモデル コンポーネントに対して生成された関数コードを解析する場合。詳細 (すべての関数呼び出しサイト)— モデル内のすべてのブロックに対して生成された関数コードを解析する場合。
関数のプロファイリングでサポートされているのは、ERT システム ターゲット ファイルのみです。
[ワークスペース変数] フィールドで、名前を指定します。シミュレーションを実行すると、MATLAB ベース ワークスペースにこの名前の変数が生成されます。この変数には実行時間の測定値が含まれます。また、この変数は
coder.profile.ExecutionTime型のオブジェクトです。[データのインポート/エクスポート] 、 [単一のシミュレーション出力] チェック ボックスがオンになっている場合、指定した
Simulink.SimulationOutputオブジェクト内にこの変数が作成されます。Save optionsドロップダウン リストから、次のいずれかのオプションを選択します。
要約データのみ— シミュレーション中に実行時間をシミュレーション データ インスペクターにストリーミングします。シミュレーションの終了時に最小限の情報のみを保存します。長時間のシミュレーションの際など、レポートのみを生成してメモリ使用量を削減する場合に、このオプションを使用します。すべてのデータ— シミュレーション中に実行時間をシミュレーション データ インスペクターにストリーミングします。実行時間プロファイルをベース ワークスペースに保存し、レポートを生成します。シミュレーション後、coder.profile.ExecutionTimeクラスおよびcoder.profile.ExecutionTimeSectionクラスのメソッドを使用して、シミュレーション中に発生したプロファイリングされたコード セクションへの呼び出しごとの実行時間測定値を取得できます。このオプションを選択すると、メトリクス表示ウィンドウおよび生成されたレポートに、シミュレーション データ インスペクターのアイコン
が表示されます。このアイコンをクリックすると、シミュレーション結果がシミュレーション データ インスペクターにインポートされます。その後、実行時間をプロットし、さまざまなシミュレーションのプロットを管理および比較できます。メトリクスのみ— Simulink® とターゲット アプリケーション間の通信チャネルの帯域幅使用量を削減します。シミュレーション中、実行時間はシミュレーション データ インスペクターにストリーミングされません。ターゲット ハードウェア上で、最大実行時間、平均実行時間、および呼び出し数が保存されます。シミュレーションの終了時に、Simulink はターゲット ハードウェアから開発用コンピューターにデータをアップロードします。
[OK] をクリックします。
PIL シミュレーションの場合:
ハードウェア固有のタイマーを構成する必要があります。ターゲット接続を設定するときに、タイマー オブジェクトを作成します。このアクションは SIL シミュレーションでは必要ありません。詳細については、Set Up PIL Connectivity by Using Target FrameworkまたはSimulink 用の PIL ターゲット接続構成の作成を参照してください。
実行時間からインストルメンテーション オーバーヘッドを除外できます。詳細については、Remove Instrumentation Overheads from Execution Time Measurementsを参照してください。
プロファイリングの粒度の制御
実行時間プロファイリングの粒度を制御できます。つまり、特定の関数呼び出しサイトへのコード インストルメンテーションの追加を防止できます。プロファイリングの粒度を制御することにより、以下を行うことができます。
改善が必要なモデル コンポーネントのパフォーマンスに集中する。たとえば、初回実行後、処理時間をほとんど必要としないブロックに対するプロファイリングを無効にします。このアクションにより、プロファイリング レポートに表示される項目の数が減ります。
コード インストルメンテーション オーバーヘッドを削減する。たとえば、単純な関数の場合、コード インストルメンテーション オーバーヘッドが関数コードの実行時間よりも大きくなることがあります。
タスクの実行時間メトリクスのみを生成するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] 、 [検証] ペインで、[タスク実行時間を計測する] チェック ボックスをオンにし、[関数の実行時間を計測する] を [オフ] に設定します。
最上位モデル内の参照モデルおよび Atomic サブシステムの関数実行データを生成するには、[コード生成] 、 [検証] ペインで、[タスク実行時間を計測する] チェック ボックスをオンにし、[関数の実行時間を計測する] を [概略 (参照モデルおよびサブシステムのみ)] に設定します。
関数実行データを生成するには、生成コードに測定プローブを挿入する必要があります。([Function ブロック パラメーター] ダイアログ ボックスの [コード生成] タブで) [関数のパッケージ化] フィールドを [再利用できない関数] または [再利用可能な関数] のいずれかに設定した場合にのみ、Atomic サブシステムの測定プローブが挿入されます。このフィールドが [自動] に設定されている場合、プローブの挿入は、[自動] 設定によって決定されるパッケージ化の選択に応じて行われます。このフィールドが [インライン] に設定されている場合、プローブは挿入されません。
メモ
生成されたコードでは、次の場合を除き、各関数呼び出しが測定プローブでラップされます。
式の畳み込みのため、呼び出しサイトをラップできない (余分なローカル変数の削除 (式の畳み込み) を参照)。
呼び出しサイトが共有ユーティリティ コード内にある (共有ユーティリティ コードの生成を参照)。
モデル参照階層の関数実行時間を生成するには、次のようにします。
最上位モデルで [コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[コード生成] 、 [検証] ペインを選択します。
[タスク実行時間を計測する] チェック ボックスをオンにします。
プロファイリングする各 Model ブロックに対して、関数実行時間が必要な参照レベルでのみ [関数の実行時間を計測する] を指定します。
たとえば、最上位モデルに Model ブロック A が含まれていて、そのブロックの中に Model ブロック B が含まれているとします。

モデル B の関数の実行時間を生成する場合は、最上位モデルに対して [タスク実行時間を計測する] を選択し、モデル B に対して [関数の実行時間を計測する] を指定します。
最上位モデルの次のパラメーターにより、参照モデルの対応するパラメーターがオーバーライドされます。
タスク実行時間を計測する。最上位モデルに対してこのパラメーターを無効にすると、参照モデルの関数プロファイリングも無効になります。
ワークスペース変数
ファイル保存オプション
コード プロファイル アナライザーを使用したモデルの階層構造内での実行時間プロファイリングの構成
コード プロファイル アナライザー アプリを使用して、モデルの階層構造の実行時間プロファイリング設定を構成および検証できます。
コード プロファイル アナライザー アプリを開きます。
[一般] タブで [モデルの構成] ボタンをクリックします。
[構成] タブの [読み込み] セクションで、ファイル ブラウザーまたは [最上位モデルを開く] ドロップダウン リストを使用して構成の最上位モデルを選択します。
実行時間プロファイリングを有効にするには、[構成] セクションで以下を行います。
[プロファイル実行時間] ボタンをクリックします。
MATLAB ワークスペースに保存されるデータを減らすには、[すべてのデータ] ボタンをクリックしてから [要約データのみ] または [メトリクスのみ] を選択します。
階層内のモデルの関数プロファイリングを制御するには、[モデル設定] ビューで [関数プロファイリング] 列の設定
[off]、[coarse]、または[detailed]を使用します。
モデルを Simulink エディターで表示するには、以下を行います。
[モデルの階層構造] ビューまたは [モデル設定] ビューでモデルを選択します。
ツールストリップの [検証] セクションで [モデルの強調表示] ボタンをクリックします。
階層全体のプロファイリング設定が有効であることを確認するには、[構成の検証] ボタンをクリックします。
階層内のモデルに対するプロファイリング設定を保存するには、[構成を適用] ボタンをクリックします。
ブロックのプロファイリングの制御
モデル内のブロック (サブシステム ブロックなど) のコード実行プロファイリングを制御するには、CodeProfilingOverride ブロック パラメーターを使用します。
Simulink エディターでブロックを選択します。
コマンド ウィンドウで次を実行します。
set_param(gcb, 'CodeProfilingOverride', blockParameterValue)
blockParameterValueに次のいずれかの値を使用します。'off'— ブロックのプロファイリングを無効にします。'on'— 親モデルでプロファイリングが有効になっている場合、ブロックのプロファイリングを有効にします。'inherit'(既定の設定) — 親ブロックのプロファイリング設定を適用します。
ブロックのプロファイリング構成を変更しても、量産コードの再生成は行われません。
参考
ファイル保存オプション | 関数の実行時間を計測する | ワークスペース変数 | タスク実行時間を計測する | SIL/PIL マネージャー | コード プロファイル アナライザー