効果的に高速化するためのモデル設計
アクセラレータ モードとラピッド アクセラレータ モードは、モデルからシミュレーション ターゲットを生成することで、シミュレーション実行を高速化します。アクセラレータ シミュレーション ターゲットは、シミュレーション中のモデルとの柔軟性および対話性のバランスを保ちながら、パフォーマンス向上を実現します。ラピッド アクセラレータ シミュレーション ターゲットは、最も高い実行パフォーマンスを提供しますが、柔軟性および対話性は低下します。
一般に、アクセラレータ モードの制限によってシミュレーションが実行できなくなることはありませんが、アクセラレータ モードを使用することによるパフォーマンス上の利点が損なわれる可能性があります。一方、ラピッド アクセラレータ モードでは一貫したパフォーマンス向上の効果が得られますが、その制限により、ラピッド アクセラレータ シミュレーションを実行するためにモデルを変更する必要が生じる場合があります。
アクセラレータ モード用のブロックの選択
モデル内のブロックは、アクセラレータ モード使用時のパフォーマンス向上の度合いに影響します。アクセラレータ モードでは、シミュレーション中のすべてのブロックの実行方法が最適化されるわけではありません。モデルに次のブロックが多数含まれている場合、アクセラレータ モードを使用しても、ノーマル モードと比較して大幅なパフォーマンス向上が得られない可能性があります。
Display ブロック
From File ブロック
From Workspace ブロック
最上位レベルの Inport ブロック
最上位レベルの Outport ブロック
Scope ブロック
To File ブロック
To Workspace ブロック
次のブロックは、既定の JIT アクセラレータ モードで実行すると、シミュレーション実行時のパフォーマンスが低下する可能性があります。
Transport Delay ブロック
ラピッド アクセラレータ モード用のブロックの選択
次のブロックは、ラピッド アクセラレータ シミュレーションではサポートされていません。
SimEvents® ブロックなど、コード生成をサポートしないブロック
特定のターゲット専用のコードを生成するブロック
Simulink® Real-Time™ 製品のブロックや、Freescale® MPC555 向けのブロックなどのデバイス ドライバーの S-Function
S-Function 実行の制御
メモ
既定の JIT アクセラレータ モードでは、カスタム TLC S-Function のインライン化はサポートされていません。TLC S-Function を含むモデルを JIT アクセラレータ モードでシミュレーションすると、実行速度が低下する可能性があります。ただし、JIT アクセラレーションによって、アクセラレータ シミュレーション ターゲットの生成は高速化されます。
Target Language Compiler を使って S-Function をインライン化すると、Simulink API の不要な呼び出しが除外されることで、クラシック アクセラレータ モードでのパフォーマンスが向上します。ただし、既定では、クラシック アクセラレータ モードは S-Function に対してインライン化された TLC ファイルが存在していても無視します。ラピッド アクセラレータ モードは、使用できる TLC ファイルがあれば、それを必ず使用します。
この動作が既定として選択された理由の例の 1 つは、I/O ボードの特定のハードウェア レジスタにアクセスするために作成されたデバイス ドライバーの S-Function ブロックです。ソフトウェアはターゲットでなくホスト システムで実行されるため、ターゲット I/O レジスタにはアクセスできず、アクセスしようとすると失敗します。
クラシック アクセラレータ モードで、S-Function MEX ファイルの代わりに TLC ファイルを使用するには、次の例のように S-Function の mdlInitializeSizes 関数の SS_OPTION_USE_TLC_WITH_ACCELERATOR を指定します。
static void mdlInitializeSizes(SimStruct *S)
{
/* Code deleted */
ssSetOptions(S, SS_OPTION_USE_TLC_WITH_ACCELERATOR);
}
ラピッド アクセラレータ モードでは、S-Function の C ファイルが同じフォルダーに存在しない場合は MEX ファイルが使用されます。
メモ
S-Function の .c コードまたは .cpp コードを使用するには、それらのファイルが S-Function MEX ファイルと同じフォルダー内にあることを確認します。そうでない場合、追加ファイルを S-Function にインクルードするか、rtwmakecfg.m ファイルを使用してパス制限を回避することもできます。詳細については、生成された makefile を rtwmakecfg.m API を使用してカスタマイズ (Simulink Coder)を参照してください。
アクセラレータ シミュレーションおよびラピッド アクセラレータ シミュレーションにおけるデータ型の考慮事項
アクセラレータ シミュレーションでは、65,535 ビットまでの固定小数点信号およびベクトルをサポートします。
ラピッド アクセラレータ シミュレーションでは、次をサポートします。
65,535 ビットまでの固定小数点パラメーター
最上位レベルの入力端子を使用した、32 ビットまでの列挙データおよび固定小数点データの読み込み
ラピッド アクセラレータ シミュレーションでは、From Workspace ブロックを使用した固定小数点データの読み込みはサポートされていません。
ラピッド アクセラレータ シミュレーションでは、To Workspace ブロックの [fi オブジェクトとして固定小数点データのログを記録する] パラメーターは無視されます。
ラピッド アクセラレータ シミュレーションでは、パラメーターとしてバス オブジェクトをサポートします。
アクセラレータ シミュレーションおよびラピッド アクセラレータ シミュレーションでは、整数は可能な限りコンパクトに格納されます。
Fixed-Point Designer™ は、アクセラレータ シミュレーションおよびラピッド アクセラレータ シミュレーションでは、最小、最大、またはオーバーフローのデータを収集しません。
アクセラレータ シミュレーションおよびラピッド アクセラレータ シミュレーションでは、Assertion ブロックを含め、限られた実行時の診断セットをサポートします。
ラピッド アクセラレータ シミュレーションでのスコープとビューアーの動作
ラピッド アクセラレータ シミュレーションでのスコープとビューアーの動作は、シミュレーションをプログラムによって実行するか、Simulink エディターなどのユーザー インターフェイスから実行するかによって異なります。詳細については、ユーザー インターフェイスからのアクセラレータ モードの実行およびアクセラレータ モードのプログラムによる操作を参照してください。
| スコープまたはビューアー タイプ | 対話形式でのシミュレーションの実行 | プログラムによるシミュレーションの実行 |
|---|---|---|
| Simulink Scope ブロック | ノーマル モードと同じサポート |
|
| Simulink 信号ビューアーのスコープ | グラフィックスは更新されているが、ログはサポートされていない | サポートなし |
| その他の信号ビューアーのスコープ | エクスターナル モードでのサポートに制限 | サポートなし |
シミュレーション データ インスペクターやロジック アナライザーなど、シミュレーション中にログ データをストリーミングするビューアー | シミュレーション中に可視化されないデータ | シミュレーション中に可視化されないデータ |
| Stateflow® チャート | ノーマル モードと同じチャートのアニメーションのサポート | サポートなし |
アクセラレーションを妨げる要因
モデルが以下のような場合は、アクセラレータ モードまたはラピッド アクセラレータ モードは使用できません。
数値、論理、文字配列でなく、スパース配列である MATLAB® S-Function への配列パラメーターを渡すまたは 3 次元以上の配列パラメーターを渡す場合。
複素数入力をもつ三角関数を含む Fcn ブロックを使用している場合。
場合によっては、アクセラレータ シミュレーションおよびラピッド アクセラレータ シミュレーションの結果に、次のような外部コードやカスタム コードへの変更が反映されないことがあります。
TLC コード
rtwmakecfg.mファイルを含む S-Function ソース コード統合されたカスタム コード
S-Function Builder
このような場合は、たとえば
slprjフォルダーを削除して、最上位モデルのシミュレーション ターゲットを強制的にリビルドすることを検討してください。メモ
JIT アクセラレーションでは、アクセラレーション ターゲット コードはメモリ上に保持され、モデルが開いている限り、
slprjフォルダーを削除しても再利用できます。
ラピッド アクセラレータの制限
ラピッド アクセラレータ モードでは、以下をサポートしていません。
R2026a より前: 代数ループを含むモデル。
インライン化されていない MATLAB 言語または Fortran S-Function。Target Language Compiler (TLC) を使用して C で S-Function を作成するか、それらをインライン化しなければなりません。または、MEX ファイルを使用することもできます。詳細については、Write Fully Inlined S-Functions (Simulink Coder)を参照してください。
デバッグ ユーティリティまたは Simulink プロファイラー。
Simulink.RunTimeBlockオブジェクトなどのブロック ランタイム オブジェクト。RHEL / CentOS 6.x または 7.x を実行するシステム。
MATLAB コマンド ウィンドウへのメッセージの出力。
モデル パラメーター、ブロック パラメーター、およびモデル内の変数を定義する数値は、次のいずれかのデータ型でなければなりません。
booleanuint8またはint8uint16またはint16uint32またはint32singleまたはdouble固定小数点
列挙型
ラピッド アクセラレータ シミュレーションでは、以下に対して指定された出力の最小値および最大値は適用されません。
最上位レベルの入力端子
変数値またはパラメーター値を定義するために使用される
Simulink.Parameterオブジェクト
Function-Call Subsystem 内の To File ブロックおよび To Workspace ブロックは、関数呼び出し端子が未接続であるか、Ground ブロックに接続されている場合、ログ ファイルを生成しません。
バスまたはカスタム列挙を使用するカスタム コードは、ラピッド アクセラレータ シミュレーションでは完全にはサポートされていません。
カスタム コードでバスまたはカスタム列挙を表す構造体を使用している場合、ラピッド アクセラレータ シミュレーションで予期しないシミュレーション結果が生成される可能性があります。
カスタム コードにバスまたはカスタム列挙の型定義が含まれている場合、ラピッド アクセラレータ シミュレーション ターゲットのビルド時に、これらの構造体の型定義が重複する可能性があります。シミュレーション ターゲットのビルドによって型定義の重複が発生した場合、エラーが発行されます。
構造体を使用してパラメーター値を定義する場合、ラピッド アクセラレータ シミュレーション用に指定する調整済みパラメーター値は 2 kB 未満でなければなりません。
最新チェックを無効にしたラピッド アクセラレータ シミュレーションでは、
Simulink.LookupTableオブジェクトの調整はサポートされていません。スコープは、Simulink Function ブロック、Function-Call Subsystem、および反復サブシステムについて、すべてのデータ点を表示しません。
予約キーワード
単語によっては、Simulink Coder™ コード言語、アクセラレータ モードおよびラピッド アクセラレータ モードで使用するために予約されているものもあります。これらのキーワードはサブシステム上の関数または変数名、またはエクスポートされたグローバル信号名であってはいけません。これらの予約キーワードを使用すると、エラーが出力され、モデルをコンパイルまたはシミュレーションできなくなります。
Simulink Coder 製品用に予約されたキーワードの一覧は、生成される識別子の構成 (Simulink Coder)にあります。この表では、アクセラレータ シミュレーションおよびラピッド アクセラレータ シミュレーションにのみ適用される追加キーワードをまとめています。
muDoubleScalarAbs | muDoubleScalarCos | muDoubleScalarMod |
muDoubleScalarAcos | muDoubleScalarCosh | muDoubleScalarPower |
muDoubleScalarAcosh | muDoubleScalarExp | muDoubleScalarRound |
muDoubleScalarAsin | muDoubleScalarFloor | muDoubleScalarSign |
muDoubleScalarAsinh | muDoubleScalarHypot | muDoubleScalarSin |
muDoubleScalarAtan | muDoubleScalarLog | muDoubleScalarSinh |
muDoubleScalarAtan2 | muDoubleScalarLog10 | muDoubleScalarSqrt |
muDoubleScalarAtanh | muDoubleScalarMax | muDoubleScalarTan |
muDoubleScalarCeil | muDoubleScalarMin | muDoubleScalarTanh |