Main Content

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

最適化のツールおよび手法

モデル アドバイザーを使用してコード生成のためにモデルを最適化する

モデル アドバイザーを使うと、コード生成に向けてモデルを解析して、量産配布の妨げやコード効率の制限となるモデルの問題点を検出できます。モデルの現在のコンフィギュレーションに対して実行する検査の集合から選択できます。モデル アドバイザーはモデルを解析して、検査結果と共に各領域の改善提案を生成します。モデル アドバイザーの診断のほとんどは、モデルがコンパイルされた状態になっていることを要求しませんが、必要な場合はその旨ただし書きがあります。

モデル アドバイザーを実行する前に、コード生成で指定する予定のターゲットを選択します。モデル アドバイザーは ERT および ERT ベースのシステム ターゲット ファイルで最も効果的に動作します。

モデル アドバイザーを使用してコード生成用にモデルを最適化する方法について調べるには、次の例を参照してください。

メモ

モデル例の rtwdemo_advisor2rtwdemo_advisor3 には Stateflow® と Fixed-Point Designer™ ソフトウェアが必要です。

モデル アドバイザーの使用方法の詳細については、モデル アドバイザー チェックの実行を参照してください。チェックの詳細については、Simulink Coder のチェックを参照してください。

Stateflow オブジェクトの生成コードを最適化するための設計上のヒント

グラフィカル関数内の、マシンを親とするデータにはアクセスしない

この制限を設けると、グラフィカル関数に対して生成されたコードには、パラメーターの長いリストが表示されません。グラフィカル関数と同じチャートに存在するローカル データにはアクセスできます。詳細は、グラフィカル関数の定義によるロジック パターンの再利用 (Stateflow)を参照してください。

グラフィカル関数のインライン オプションを明示する

Stateflow チャートでグラフィカル関数を使用する場合は、[関数インライン オプション] プロパティとして [インライン] または [関数] を選択します。そうしないと、グラフィカル関数に対して生成されたコードが希望とおりに表示されない場合があります。詳細は、グラフィカル関数プロパティの指定 (Stateflow)を参照してください。

Stateflow チャートで複数のエッジトリガー イベントを使用しない

1 つ以上のトリガーを使用する場合は、立ち上がりエッジまたは立ち下がりエッジの検出を処理する複数のコード ステートメントを生成します。複数のトリガーが必要な場合は、代わりに関数呼び出しイベントを使用します。詳細については、入力イベントの送信による Stateflow チャートのアクティブ化 (Stateflow)を参照してください。

チャートの入力信号を単一のバス オブジェクトに統合する

バス オブジェクトを使用する場合は、生成される関数のパラメーター リストに含まれるパラメーターを減らします。このガイドラインは、チャートの出力信号にも適用されます。詳細は、Stateflow 構造体の定義 (Stateflow)を参照してください。

離散サンプル時間によるチャートの使用

Triggered Subsystem または Enabled Subsystem 内にない離散チャート用に生成されたコードでは、Simulink® が提供する時間ではなく、整数カウンターを使用して時間を追跡します。これにより、オーバーヘッドおよびメモリの観点からより効率的なコード生成が可能になるほか、ソフトウェアインザループ (SIL) およびプロセッサインザループ (PIL) のシミュレーションでこのコードが使用可能になります。

その他の最適化手法

コード生成用にモデルを最適化するために次の手法を適用できます。

  • Embedded Coder® ユーザーの場合、アプリケーションで整数演算のみ使用する場合、[インターフェイス] ペインの [ソフトウェア環境] セクションの [浮動小数点数をサポートします] パラメーターをオフにして、生成コードに浮動小数点データまたは演算が含まれないようにします。このパラメーターがオフの場合、コード生成中に非整数データまたは式が発生すると、エラーが生じます。エラー メッセージには問題のブロックおよびパラメーターが示されます。

  • [コンフィギュレーション パラメーター][コード生成][インターフェイス][詳細設定パラメーター][MAT ファイルのログ] パラメーターを無効にします。このパラメーターをオフにすると、ログ変数の初期化、更新、およびクリーン アップに必要な追加のコードおよびメモリ使用量が除外されます。さらに、MAT ファイルのログをサポートするために生成されたコードは malloc を呼び出します。これは、アプリケーションに望ましくない可能性があります。

  • アップグレード アドバイザーを使用して、現在の機能を使用するために古いモデルをアップグレード (以前のバージョンまたは現在のバージョンで保存) します。詳細は、モデルのアップグレードを参照してください。

  • ビルドの前に、コンパイラに最適化フラグ (たとえば、-O2gcc に、-OtMicrosoft® Visual C++® コンパイラに) を設定します。

  • S-Function の TLC ファイルを書いて、C/C++ S-Function を生成されたコードに直接インライン化します。詳細については、S-Function ターゲットを使用したシミュレーションの高速化、コードの再利用または知的所有権の保護およびInline C MEX S-Functionsを参照してください。

  • 可能な限り double 以外の Simulink データ型を使用します。使用可能なデータ型は、Boolean、符号付きと符号なしの 8、16、32 ビット整数、および 32、64 ビット浮動小数点数です (double は 64 ビット浮動小数点数)。詳細は、Simulink におけるデータ型についてを参照してください。ブロックごとの要約の表示には、showblockdatatypetable をクリックするか、そのコマンドをコマンド ウィンドウに入力してください。

  • 生成されたコード内のメモリに保存するように設定した調整可能なブロック パラメーターの場合、パラメーターのデータ型と信号データ型を一致させることで、不要な型変換と C シフトを排除できます。可能な限り、パラメーター値は小さな整数データ型に保存してください。生成されたコードにおけるパラメーターのデータ型を参照してください。

  • ルックアップ テーブル データで繰り返されている値を削除します。

  • Merge ブロックを使って、可能な限り信号の出力をマージします。Stateflow チャートで Function-Call Subsystem の実行を制御する必要があるとき、このブロックは特に役に立ちます。次のモデルは Merge ブロックをどう使用するかの例を示します。

    Merge ブロックに接続された 1 つを超える信号が Auto 以外のストレージ クラスをもつ場合、そのブロックに接続されたすべての Auto 以外の信号は、同じ名前同じストレージ クラスをもたなければなりません。Merge ブロック同士が直接接続される場合、そのグループの Merge ブロックに接続される信号にこれらのルールが適用されます。

関連するトピック