メインコンテンツ

コード プロファイル アナライザー

生成コードの実行時間とスタック使用量のプロファイルを解析

R2023a 以降

説明

生成コードのソフトウェアインザループ (SIL) またはプロセッサインザループ (PIL) の実行によって生成される実行時間とスタック使用量のプロファイルを解析するには、コード プロファイル アナライザー アプリを使用します。

  • タスクと関数の実行時間を確認し、特定のシミュレーション時間における関数呼び出しスタックを可視化し、異なる実行の実行時間を比較する。

  • タスクと関数のスタック使用量を確認し、異なる実行の値を比較する。

Embedded Coder® を使用している場合は、以下も可能です。

  • XCP ベースのエクスターナル モード シミュレーションによって生成される実行時間プロファイルを解析する。

  • モデルの階層構造のコード プロファイリングを構成する。

  • 生成コードのパフォーマンスのホットスポットを特定して解析する。このワークフローでは coder.profile.test.runTests 関数を使用します。

  • 生成コードのクリティカル パスを特定して解析する。このワークフローでは coder.profile.test.analyzePath 関数を使用します。

Code Profile Analyzer app

コード プロファイル アナライザー アプリを開く

Simulink® モデルからコードを生成する場合は、[SIL/PIL] タブをクリックします。[結果] ギャラリーの [実行プロファイリングの結果] または [スタック プロファイリングの結果][コード プロファイル アナライザー] ボタンをクリックします。

MATLAB® コードからコードを生成する場合は、コマンド ウィンドウで SIL/PIL の実行を終了します。コード ジェネレーターにより、実行プロファイリング レポートまたはスタック プロファイリング レポートへのリンクを含むメッセージがコマンド ウィンドウに出力されます。そのリンクをクリックします。

あるいは、Simulink と MATLAB のどちらのワークフローでも、SIL/PIL の実行の終了後に coder.profile.show または coder.profile.show(profileVariable) を入力してコマンド ウィンドウからコード プロファイル アナライザーを開きます。

Simulink ワークフローの場合、profileVariable[ワークスペース変数] (CodeExecutionProfileVariable) または [スタック ワークスペース変数] (CodeStackProfileVariable) コンフィギュレーション パラメーターで指定するワークスペース変数 (coder.profile.ExecutionTime または coder.profile.ExecutionStack オブジェクト) です。

MATLAB ワークフローの場合は、getCoderExecutionProfile 関数または getCoderStackProfile 関数を使用して profileVariable を取得します。

アプリが既に開いている場合は、[一般] タブを使用して、実行時間またはスタック使用量の測定値を含むワークスペース変数を選択することで、単一のシミュレーション結果をインポートできます。

[一般] タブを使用して、複数のシミュレーションの集計結果をインポートすることはできません。代わりに、コマンド coder.profile.show(profileAggregate) を使用します。ここで、profileAggregatecoder.profile.ExecutionTimeSet または coder.profile.ExecutionStackSet オブジェクトです。

コード プロファイル アナライザーのワークフロー

インポートしたシミュレーション結果のタイプにより、アプリに表示されるタブと実行可能なワークフローが決まります。

coder.profile.ExecutionTime オブジェクトを使用して結果をインポートすると、[時間プロファイリング] タブに、次の表で説明されているタブが表示されます。

タブ目的
タスクの実行

タスクの実行時間メトリクスを表示します。各タスクの実行時間 (つまり、最小、平均、および最大実行時間) と対応する CPU 使用率を検査します。これにより、実行時間の問題なくタスク全体がターゲット ハードウェア上で実行できるかどうかを判別できます。

View and Compare Code Execution Timesを参照してください。

関数の実行

生成されたコードの関数の実行時間メトリクスを表示して、ホットスポットを特定したり、やり直しが必要な関数を判別したりします。

View and Compare Code Execution Timesを参照してください。

関数呼び出しスタック

特定のシミュレーション時間での関数呼び出しスタックを表示します。タスクの実行時間が予想よりも長くなっていることがわかった場合、実行インスタンスごとにその関数呼び出しステップを表示できます。この機能は、パフォーマンスのボトルネックを特定するのに役立ちます。

View and Compare Code Execution Timesを参照してください。

比較

2 つのシミュレーションの実行時間メトリクスを比較して、パフォーマンスの低下を特定します。

View and Compare Code Execution Timesを参照してください。

タスク検証

CPU の実行可能性解析を実行して、タスク セットが実行時間の問題なく実行できるかどうかを正式に判別します。タスクから CPU へのマッピングの効果を解析します。

Validate Task-to-CPU Mappingを参照してください。

CPU 使用率

タスクごとに、使用可能な CPU における実行時間を表示します。この機能により、システム上でタスクがどのように割り当てられているかが示され、負荷分散の改善に役立ちます。

次の条件に当てはまる場合にのみ利用可能です。

  • シミュレーションが XCP エクスターナル モードである

  • マルチタスク実行が有効になっている

  • ターゲット アプリケーションがオペレーティング システム上で実行される

Validate Task-to-CPU Mappingを参照してください。

coder.profile.ExecutionTimeSet オブジェクトを使用して結果をインポートすると、[時間プロファイリング] タブに、次の表で説明されているタブが表示されます。

タブ目的
累積結果

さまざまなテストのタスク実行時間メトリクスを表示します。一連のテスト ケースを実行した場合、タスクごとに最長実行時間と平均実行時間を確認できます。これにより、最も要求の厳しい実行を生成するテスト ケースを特定できます。

フレーム グラフ

実行時間が最長のタスクのフレーム グラフを表示します。このビューは、タスク実行インスタンス中に何が行われているのかを理解するのに役立ちます。これにより、パフォーマンスのボトルネックを特定できます。

比較

2 つのシミュレーションの実行時間メトリクスを比較して、パフォーマンスの低下を特定します。

タスク検証

CPU の実行可能性解析を実行して、タスク セットが実行時間の問題なく実行できるかどうかを正式に判別します。タスクから CPU へのマッピングの効果を解析します。

Validate Task-to-CPU Mappingを参照してください。

coder.profile.ExecutionStack オブジェクトを使用して結果をインポートすると、[メモリ プロファイリング] タブに、次の表で説明されているタブが表示されます。

タブ目的
スタック メモリ

タスクおよび関数のスタック使用量メトリクスを表示します。タスクごとに、スタック メモリ使用量の最小値、平均値、および最大値の概要を表示します。タスク内で、実行される各関数に必要なメモリの量を確認します。

View and Compare Stack Usage Metricsを参照してください。

関数呼び出しスタック

特定のシミュレーション時間での関数呼び出しスタックを表示します。タスクのメモリ割り当てが予想よりも大きいことがわかった場合、実行インスタンスごとにその関数呼び出しスタックを表示できます。この機能は、パフォーマンスのボトルネックを特定するのに役立ちます。

View and Compare Stack Usage Metricsを参照してください。

比較

2 つのシミュレーションのスタック使用量メトリクスを比較して、パフォーマンスの低下を特定します。

View and Compare Stack Usage Metricsを参照してください。

coder.profile.ExecutionStackSet オブジェクトを使用して結果をインポートすると、[メモリ プロファイリング] タブに、次の表で説明されているタブが表示されます。

タブ目的
累積結果

さまざまなテストのタスク スタック使用量メトリクスを表示します。一連のテスト ケースを実行した場合、タスクごとにスタック使用量の最大値を確認できます。これにより、最も要求の厳しい実行を生成するテスト ケースを特定できます。

比較

2 つのシミュレーションのスタック使用量メトリクスを比較して、パフォーマンスの低下を特定します。

モデルがパフォーマンス監視ユニット (PMU) メトリクスを生成するように構成されている場合、結果をインポートすると、[コードのプロファイリング] タブに、次の表で説明されているタブが表示されます。

タブ目的
関数の実行

生成されたコードの関数の PMU メトリクスを表示して、ホットスポットを特定したり、やり直しが必要な関数を判別したりします。

Generate Profiles Using PMU Metricsを参照してください。

比較

2 つのシミュレーションの PMU メトリクスを比較して、パフォーマンスの低下を特定します。

Generate Profiles Using PMU Metricsを参照してください。

データをインポートするかどうかに関係なく、コード プロファイル アナライザー アプリを使用して、モデルの階層構造でコード プロファイリングを構成することもできます。Configure Execution-Time Profiling in Model Hierarchy Using Code Profile AnalyzerおよびConfigure Stack Usage Profiling in Model Hierarchy Using Code Profile Analyzerを参照してください。

すべて展開する

次の表に、さらにワークフローの例を示します。

次の用途にアプリを使用します。
Aggregate Execution-Time Profiles to Identify Worst Execution

実行時プロファイルの集計を処理します。たとえば、以下を特定します。

  • 各タスクの最長の実行

  • 生成されたコードのパフォーマンスのホットスポット

Analyze Execution Times of Critical Paths

生成されたコードのクリティカル パス解析の結果を表示します。

Visualize Task Scheduling in XCP External Mode Simulation

オーバーラン率 (オーバーラン イベント数 / 呼び出し数) をパーセンテージで表示します。

Aggregate Stack Usage Profiles to Identify Most Demanding Execution

スタック使用量プロファイルの集計を処理します。たとえば、各タスクの最も要求の厳しい実行を特定します。

関連する例

バージョン履歴

R2023a で導入