効果的に高速化するためのモデル設計
アクセラレータ モード用のブロックの選択
アクセラレータ モードは、ノーマル モードでの実行と同じように、次のブロックを実行します。これらのブロックでは、アクセラレータ ビルド向けのコードが生成されないためです。このため、モデルにこれらのブロックが含まれる割合が高い場合は、アクセラレータ モードによってパフォーマンスが大幅に向上しない可能性があります。これらすべての Simulink® ブロックはインタープリター型コードを使用します。
次のブロックは、既定の JIT アクセラレータ モードで実行すると、シミュレーション実行時のパフォーマンスが低下する可能性があります。
ラピッド アクセラレータ モード用のブロックの選択
コード生成をサポートしないブロック (SimEvents® など) や特定のターゲットのみに対してコードを生成するブロックは、ラピッド アクセラレータ モードではシミュレーションできません。
さらに、モデルに次のいずれかのブロックが含まれていると、ラピッド アクセラレータ モードは機能しません。
Simulink Real-Time™ 製品または Freescale® MPC555 向けのブロックなどのデバイス ドライバーの S-Function
S-Function 実行の制御
メモ
既定の JIT アクセラレータ モードでは、ユーザー作成の TLC S-Function のインライン化はサポートされていません。JIT アクセラレータ モードで TLC S-Function を含むモデルを実行する場合、実行速度が低下する可能性があります。ただし、JIT アクセラレーションにより、コード生成速度は高速になります。
Target Language Compiler を使って S-Function をインライン化すると、Simulink API の不要な呼び出しが除外されることで、クラシック アクセラレータ モードでのパフォーマンスが向上します。ただし、既定では、クラシック アクセラレータ モードは S-Function に対してインライン化された TLC ファイルが存在していても無視します。ラピッド アクセラレータ モードは、使用できる TLC ファイルがあれば、それを必ず使用します。
この動作が既定として選択された理由の例の 1 つは、I/O ボードの特定のハードウェア レジスタにアクセスするために作成されたデバイス ドライバーの S-Function ブロックです。Simulink ソフトウェアはターゲットでなくホスト システムで実行されるため、ターゲット 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)を参照してください。
アクセラレータとラピッド アクセラレータ モードのデータ型の考慮事項
アクセラレータ モードは 128 ビットまでの固定小数点信号とベクトルをサポートします。
ラピッド アクセラレータ モードは 128 ビットまでの固定小数点パラメーターをサポートします。
ラピッド アクセラレータ モードは 32 ビットまでの固定小数点ルート入力をサポートします。
ラピッド アクセラレータ モードは列挙データ型のルート入力をサポートします。
ラピッド アクセラレータ モードは From Workspace ブロックからの固定小数点データをサポートしません。
ラピッド アクセラレータ モードは、To Workspace ブロックの [fi オブジェクトとして固定小数点データのログを記録する] パラメーターを無視します。
ラピッド アクセラレータ モードはバス オブジェクトをパラメーターとしてサポートします。
アクセラレータ モードとラピッド アクセラレータ モードは整数をできる限り小さく保存します。
Fixed-Point Designer™ はアクセラレータ モードまたはラピッド アクセラレータ モードで最小、最大、またはオーバーフローのデータを収集しません。
アクセラレータ モードは、Assertion ブロックを含め、限られた実行時の診断セットをサポートします。
ラピッド アクセラレータ モードは、Assertion ブロックを含め、限られた実行時の診断セットをサポートします。
ラピッド アクセラレータ モードでのスコープとビューアーの動作
ラピッド アクセラレータ モードでのスコープとビューアーの動作は、シミュレーションをプログラムによって実行するか対話形式で実行するかによって決まります。
スコープまたはビューアー タイプ | 対話形式でのシミュレーションの実行 | プログラムによるシミュレーションの実行 |
---|---|---|
Simulink Scope ブロック | ノーマル モードと同じサポート |
|
Simulink 信号ビューアーのスコープ | グラフィックスは更新されているが、ログはサポートされていない | サポートなし |
その他の信号ビューアーのスコープ | エクスターナル モードでのサポートに制限 | サポートなし |
信号のログ | サポートあり | サポートあり |
ログからの入力を使用するビジュアライザー (シミュレーション データ インスペクターやロジック アナライザーなど) | シミュレーション中データは可視化されない | シミュレーション中データは可視化されない |
Stateflow® チャート | ノーマル モードと同じチャートのアニメーションのサポート | サポートなし |
メモ
プログラムによってラピッド アクセラレータ シミュレーションを実行する場合は、スコープとビューアーは更新されませんが、対話形式でシミュレーションを実行したときには更新されます。ユーザー インターフェイスからのアクセラレータ モードの実行では、メニューからラピッド アクセラレータ モードを実行する方法を示しています。アクセラレータ モードのプログラムによる操作では、プログラムによってシミュレーションを実行する方法を示しています。
高速化を抑制する要素
モデルが以下のような場合は、アクセラレータ モードまたはラピッド アクセラレータ モードは使用できません。
数値、論理、文字配列でなく、スパース配列である MATLAB® S-Function への配列パラメーターを渡すまたは 3 次元以上の配列パラメーターを渡す場合。
複素数入力をもつ三角関数を含んでいる Fcn ブロックを使用する場合。
外部コードまたはカスタム コードに関連付けられている変更によって、アクセラレータまたはラピッド アクセラレータのシミュレーション結果が変化しない場合があります。これには、次が含まれます。
TLC コード
rtwmakecfg.m
ファイルを含む S-Function ソース コード統合されたカスタム コード
S-Function Builder
この場合は、最上位モデルで強制的にコードを再生成することを検討してください。または、コード生成フォルダー (たとえば
slprj
または生成モデル コード フォルダー) を削除することによって、最上位モデル コードを強制的に再生成することもできます。メモ
JIT アクセラレーションを使用すると、アクセラレーション ターゲット コードはメモリ内にあります。したがって、
slprj
フォルダを削除したとしても、モデルが開いている限り再利用可能です。
ラピッド アクセラレータ モードの制限
ラピッド アクセラレータ モードでは、以下をサポートしていません。
代数ループ。
C++ で作成されたターゲット。
インライン化されていない MATLAB 言語または Fortran S-Function。Target Language Compiler (TLC) を使用して C で S-Function を作成するか、それらをインライン化しなければなりません。または、MEX ファイルを使用することもできます。詳細については、完全インライン化 S-Function の記述 (Simulink Coder)を参照してください。
デバッグ ユーティリティまたは Simulink プロファイラー。
Simulink.RunTimeBlock および Simulink.BlockCompOutputPortData ブロックの実行時オブジェクト。
モデル パラメーターは次のいずれかのデータ型でなければなりません。
boolean
uint8
またはint8
uint16
またはint16
uint32
またはint32
single
またはdouble
固定小数点
列挙型
ラピッド アクセラレータ モードではシミュレーションを一時停止できません。
特定の状況では、ブロック パラメーターを変更すると、モデルのチェックサムも変更される構造的な変更がモデルに加えられることがあります。そのような変更の例として、DSP シミュレーションで遅延回数を変更する場合が挙げられます。このような場合は、モデルのコードを再生成しなければなりません。詳細については、高速化されたモデルでのコードの再生成を参照してください。
ルートの Inport について、ブロックで出力する最小値と最大値を指定する場合、ラピッド アクセラレータ モードはシミュレーション中にこれらの制限を認識しません。
ラピッド アクセラレータ モードでは、Function-Call Subsystem 内の To File または To Workspace ブロックは、関数呼び出し端子が Ground に接続されているか未接続の場合、ログ ファイルは生成しません。
ラピッド アクセラレータ モードは、RHEL / CentOS 6.x または 7.x を実行するシステムをサポートしていません。
予約キーワード
単語によっては、Simulink Coder™ コード言語、アクセラレータ モードおよびラピッド アクセラレータ モードで使用するために予約されているものもあります。これらのキーワードはサブシステム上の関数または変数名、またはエクスポートされたグローバル信号名であってはいけません。予約されたキーワードを使用すると、Simulink ソフトウェアはエラーを生成し、モデルのコンパイルと実行を行うことができません。
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 |