パフォーマンス アドバイザーのチェックを使用して、モデルのシミュレーション時間を改善します。
パフォーマンス アドバイザーでパフォーマンスを改善したら、測定を実行してシミュレーションのパフォーマンスを比較します。
これらのチェックを行うには、[ブロック線図の更新] を実行する必要があります。
これらのチェックでは、十分なパフォーマンス データを収集するためにシミュレーションを実行する必要があります。シミュレーションが完了すると、パフォーマンス アドバイザーにより結果レポートが出力されます。
これらのチェックでは、シミュレーション モード (ノーマル、アクセラレータ、ラピッド アクセラレータ、最新チェックがオフのラピッド アクセラレータ) を評価し、高速なシミュレーションを実現する最適なモードを特定します。
これらのチェックを使用して、パフォーマンスを改善するためのコンパイラ最適化設定を選択します。
パフォーマンス アドバイザーの実行時にベースラインを作成するには、このチェックをオンにします。ベースラインを手作業で作成することもできます。ベースラインとは、パフォーマンス アドバイザーによるチェックの前に行う、シミュレーションのパフォーマンス測定のことです。ベースラインには、シミュレーションの実行時間とシミュレーションの結果 (ログに記録された信号) が格納されます。モデルのベースラインを作成する前に、[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで以下のよう設定にしてください。
[状態] チェック ボックスをオンにします。
[形式] パラメーターを 時間付き構造体
に設定します。
シミュレーションの速度を改善するには、可能な限り診断を無効にします。たとえば、[ソルバー データの不整合] や [配列範囲の超過] など一部の診断ではシミュレーションの実行時にオーバーヘッドが発生します。
シミュレーションの速度を改善するには、可能な限り最適化を有効にします。たとえば、[ブロック削減] などの最適化が無効になっている場合は、それらの最適化を有効にしてシミュレーション速度を改善してください。
コンパイラの最適化レベルを設定すると、コンパイル速度とシミュレーション速度をトレード オフすることができます。コンパイラの高速化オプションは既定では無効になっています。これらのオプションを有効にするとシミュレーションの実行速度が上がりますが、ビルド時間が長くなります。アクセラレータ モードとラピッド アクセラレータ モード で使用する C コンパイラの速度と効率は、コンパイル ステップの実行に必要な時間に影響を与えます。
シミュレーションの速度を改善するには、正しく設定された Lookup Table ブロックを使用します。
一般に、シミュレーション速度を改善するには、MATLAB System ブロックの [シミュレーション実行方法] パラメーターで [コード生成]
を選択します。MATLAB® と Simulink® の間ではいくつかのソフトウェア レイヤーを介してデータが交換されるため、通常、[インタープリター型実行]
はシミュレーション速度を低下させます (特に、多くのデータ交換が必要なモデルの場合)。
このチェックでは、どの MATLAB System ブロックがコードを生成できるのかを特定し、可能な場合は [シミュレーション実行方法] パラメーターの値を [コード生成]
に変更します。
[コード生成]
はすべての MATLAB 関数をサポートしていませんが、MATLAB 言語のサブセットは広範囲にサポートします。この [コード生成]
を使用すると、パフォーマンスを改善できます。
シミュレーション速度を改善するには、可能な場合に、Interpreted MATLAB Function ブロックを MATLAB Function ブロックに置き換えます。MATLAB と Simulink との間ではいくつかのソフトウェア レイヤーを介してデータが交換されるため、通常、Interpreted MATLAB Function ブロックはシミュレーション速度を低下させます (特に、多くのデータ交換が必要なモデルの場合)。
さらに、ユーザーが Interpreted MATLAB Function をコンパイルすることはできないため、Interpreted MATLAB Function ブロックが存在すると、シミュレーション速度を向上させるためにアクセラレーション モードを使用することができなくなります。
MATLAB Function ブロックはすべての MATLAB 関数をサポートしていませんが、MATLAB 言語のサブセットは広範囲にサポートします。解釈された MATLAB コードを、組み込み可能な MATLAB サブセットのみ使用するコードに置き換えると、パフォーマンスを改善することができます。
シミュレーションの速度を改善するには、可能な限りシミュレーション ターゲット設定を無効にします。たとえば、[コンフィギュレーション パラメーター] ダイアログ ボックスで、[シミュレーション ターゲット] 、 [セミコロンなしの式をエコー] チェック ボックスをオフにすると、シミュレーションの速度を改善できます。
シミュレーション速度を改善するには、[コンフィギュレーション パラメーター] ダイアログ ボックスで、[モデル参照] 、 [リビルド] パラメーターが [既知の依存関係で任意の変更が検出された場合]
に設定されていること確認します。
開いていてコメントが解除されている Scope ブロックは、シミュレーションのパフォーマンスに影響する場合があります。シミュレーションのパフォーマンスを向上させるには Scope ブロックを閉じてコメント アウトします。Scope ブロックを右クリックして [コメント アウト] を選択します。
開いている Scope については、更新を減らすことによってシミュレーション速度を向上できます。Scope の [シミュレーション] メニューから [パフォーマンスを向上させるために更新を減らす] を選択します。
モデル上のアクティブな計測の設定を特定します。固定小数点の計測機能モードは、どのオブジェクトがシミュレーション中に最小、最大、オーバーフロー データのログを作成するかを制御します。計測機能は、固定小数点ツールを使用してシミュレーション範囲を収集するために必要です。これらの範囲はモデルのデータ型の推奨に使用されます (Fixed-Point Designer™ が必要)。モデルを固定小数点に頻繁に変換していない場合は、固定小数点の計測機能を無効にしてモデルへのシミュレーション速度を最大に戻します。
[アプリ] タブで [固定小数点ツール] を選択します。[設計対象のシステム] で、[続行] をクリックします。
[モデルの階層構造] ペインで、固定小数点ツールは計測機能が現在有効であるシステムを (mmo)
または (o)
で示します。モデルの階層構造のシステムを右クリックし、[固定小数点の計測機能モード]
の下の [ローカル設定を利用]
または [強制オフ]
を選択します。
固定小数点の計測機能およびデータ型オーバーライド (Fixed-Point Designer)
シミュレーションを改善するには、モデル内の参照モデルの数を検証します。複数の参照モデルがある場合、可能であればモデルをパラレルでビルドします。
パフォーマンス アドバイザーはモデルを解析し、さまざまなコア数を使用しているものとして現在のコンピューター上でのビルド時間を推定します。また、コンピューターに Parallel Computing Toolbox™ または MATLAB Parallel Server™ ソフトウェアがインストールされている場合、推定が実行されるのと同じ方法でモデルの並列ビルド時間を推定します。パフォーマンス アドバイザーは、この推定を次のように実行します。
他の参照モデルを参照しない参照モデルをモデル内で検索します。
他の参照モデルを参照しない参照モデルの各々にあるブロックの数の平均値を計算します。
他の参照モデルを参照しない参照モデルのリストから、ブロックの数が算出された平均値に一番近い参照モデルを選択します。
このモデルをビルドして、ビルド時間を取得します。
この参照モデルのブロック数とビルド時間とに基づき、他のすべての参照モデルのビルド時間を推定します。
これらのビルド時間に基づき、最上位モデルの並列ビルド時間を推定します。
並列ビルド メカニズムによって導入されたオーバーヘッド時間を計算するには、並列ビルドのオーバーヘッド時間推定係数を設定します。パフォーマンス アドバイザーは、オーバーヘッドのあるビルド時間を次のように推定します。
(1 + 並列ビルドのオーバーヘッド時間推定係数)*(1 台のマシンにおけるビルド時間)
シミュレーションを改善するには、モデル内の各 Delay ブロックが適切なバッファー タイプを使用していることを確認します。既定では、このブロックは配列バッファーを使用します ([リング バッファーを使用] オプションがオフになっています)。ただし、遅延時間が長い場合は、リング バッファーによりコピー操作の数が一定に保たれるため、実行速度を改善することができます。
Delay ブロックが配列バッファーを現在使用しており、以下のすべての条件が満たされている場合は、パフォーマンス アドバイザーによりリング バッファーが選択されます。
Delay ブロックがサンプルベース モードになっている ([入力処理] パラメーターが [チャネルとしての要素 (サンプルベース)]
に設定されている。または、入力信号の型が [サンプルベース]
に設定されている)。
遅延の長さの値または上限値が 10 以上になっている。
状態のサイズ (遅延の長さをすべての出力信号の幅で掛けた値) が 1000 以上になっている。
モデルに離散レートと連続レートの両方が含まれる場合、これらのレート間の結合によりシミュレーションの速度が低下することがあります。パフォーマンス アドバイザーは、モデル内のこれらの状況をチェックします。
モデルは可変ステップ ソルバーを使用します。
モデルには、連続レートと離散レートの両方が含まれています。
最も高速な離散レートは、ソルバーにより決定される [最大ステップ サイズ] よりも比較的小さなものです。
DecoupledContinuousIntegration
パラメーターを on
に設定すると、シミュレーションを高速化できる場合があります。
モデルに連続積分に影響しないゼロクロッシングが含まれている場合、次の条件すべてが満たされるとシミュレーションの速度が遅くなる場合があります。
モデルが可変ステップ ソルバーを使用する。
モデルに連続状態およびゼロクロッシングをもつブロックが含まれる。
一部のゼロクロッシングは、連続状態の積分に影響しない。
MinimalZcImpactIntegration
パラメーターを On
に設定すると、シミュレーションを高速化できる場合があります。
シミュレーションに不要なリセットが多数ある場合はこのチェックを実行します。連続状態をもつブロックを駆動する離散信号によって、ブロックのサンプル時間のヒットごとにリセットがトリガーされます。これらのリセットには大量の計算が必要です。パフォーマンス アドバイザーによってこれらの信号とブロックがチェックされ、そのリストが提供されます。
これらのブロックを駆動する検出済み離散信号のモデルを編集して、このようなケースを解消できます。たとえば、離散信号と、連続状態をもつ対応するブロックの間に Zero Order Hold ブロックを挿入すると、問題が解決される可能性があります。
シミュレーションを改善するには、モデルが適切なソルバー タイプを使用していることを確認します。
シミュレーション開始時に、モデルのスティッフネスの近似に応じてソルバーを選択します。スティッフなシステムは、ゆっくり変化する連続ダイナミクスと素早く変化する連続ダイナミクスの両方をもっています。陰的ソルバーはスティッフな問題向けに設計されており、陽的ソルバーはノンスティッフな問題向けに設計されています。ノンスティッフなソルバーをスティッフなシステムの解決に使用すると、効率が悪くなり、間違った結果が出力される恐れがあります。ノンスティッフなソルバーが非常に短いステップ サイズでモデルを解決している場合は、それがスティッフなシステムでないかどうかチェックしてください。
モデル | 推奨ソルバー |
---|---|
スティッフ システムを表現している場合 | ode15s |
スティッフ システムを表現していない場合 | ode45 |
パフォーマンス アドバイザーでは、陽的ソルバーまたは陰的ソルバーを選択するために、表に示す経験則を使用します。
元のソルバー | パフォーマンス アドバイザーの動作 |
---|---|
可変ステップ ソルバーの場合 | まず、0 でシステムのスティッフネスを計算してから、操作:
|
固定ステップ連続ソルバーの場合 |
|
シミュレーション時にシステムのスティッフネスが変動しない場合、この経験則は最適に機能します。システムのスティッフネスが時間と共に変化する場合、パフォーマンス アドバイザーが提案するソルバーではなく、そのシステムに最適なソルバーを選択します。
パフォーマンスおよび精度の向上のためにコシミュレーション設定を調整します。
シミュレーション時間が長くなったら変更を検証して元に戻す — シミュレーション時間が長くなる場合、パフォーマンス アドバイザーは以前のコシミュレーション設定を元に戻します。
精度の度合いが許容誤差より大きい場合は、検証して変更を元に戻す — 精度の度合いが許容誤差より大きい場合、パフォーマンス アドバイザーは以前のコシミュレーション設定を元に戻します。
明示的な数値補償が必要となる場合があるコシミュレーション信号を特定します。
シミュレーション時間が長くなる場合は、検証して変更を元に戻す — シミュレーション時間が長くなる場合、パフォーマンス アドバイザーは以前のコシミュレーション設定を元に戻します。
精度の度合いが許容誤差より大きい場合は、検証して変更を元に戻す — 精度の度合いが許容誤差より大きい場合、パフォーマンス アドバイザーはコシミュレーションを元に戻します。
データフロー領域のスループットを増やすには、システムのレイテンシを増やすと効果的な場合があります。パフォーマンス アドバイザーはモデル内のデータフロー領域を解析し、最適なレイテンシ設定を見つけます。この解析では、データフロー領域におけるマルチスレッディングに関するその他の制限も特定します。
データフロー解析はマルチステップ処理であり、分割解析を実行する前に、データグロー領域内の各ブロックに対して有効化された実行時プロファイリングを使用してモデルをシミュレーションする場合があります。
解析の完了後、パフォーマンス アドバイザーによって、ホスト コンピューターのマルチコア CPU アーキテクチャ向けにシステムのスループットを最適化するレイテンシ値が提案され、データフロー領域におけるマルチスレッディングに関するその他の制限が特定されます。
Dataflow Domain (DSP System Toolbox)
最速のシミュレーション時間を実現するには、このチェックを使用して次のモードを評価し、最適な選択を識別します。
ノーマル
アクセラレータ
ラピッド アクセラレータ
最新チェックがオフのラピッド アクセラレータ
ノーマル モードでは、Simulink はシミュレーション実行中にモデルを解釈します。このモードではコンパイル ステップを別途必要としないなため、モデルが頻繁に変更される場合は、一般にこのモードを推奨します。また、このモードでは最も柔軟にモデルを変更することができます。
アクセラレータ モードでは、Simulink はモデルをバイナリの共有ライブラリ (または可能であれば DLL) にコンパイルします。そのため、ノーマル モードでシミュレーションを解釈する際に発生するブロック間のオーバーヘッドが排除されます。アクセラレータ モードはデバッガーとプロファイラーをサポートしますが、実行時の診断はサポートしません。
ラピッド アクセラレータ モードでは、シミュレーション速度は最速になりますが、このモードはモデル内のすべてのブロックで C コードが使用できるモデルでのみ機能します。また、このモードは、デバッガーまたはプロファイラーをサポートしていません。
最新チェックがオフのラピッド アクセラレータを選択すると、パフォーマンス アドバイザーはシミュレーション中に最新チェックを実行しません。最新チェックのオーバーヘッドを発生させることなくパラメーターを調整する間に、ラピッド アクセラレータの実行可能ファイルを繰り返し実行することができます。たとえば、大規模モデルや広範囲なモデル参照を作成するモデルがある場合、この実行方法を使用すると効率が向上します。
3 次元信号をもつモデルでは、ノーマル モードやアクセラレータ モードが最適です。
このチェック ボックスを使用して、コンパイラの最適化の実行でシミュレーション速度を高速化できるかどうか確認します。最適化は、アクセラレータ モードまたはラピッド アクセラレータ モードでのみ実行できます。
メモ
MATLAB がコンパイラの最適化を使用するように構成されていない場合、このチェックはスキップされます。
このチェックでは、モデルのシミュレーション時間および精度のパフォーマンス全体の改善を検証します。パフォーマンスが元のモデルより改善されない場合、パフォーマンス アドバイザーはモデルに対するすべての変更を破棄し、元のモデルを読み込みます。
検証のグローバル設定はこのチェックには適用されません。他のチェックの結果としての変更からパフォーマンスの改善を検証していない場合、モデルに対するすべての変更の最終検証を実行するにはこのチェックを使用します。