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

効果的に高速化するためのモデル設計

アクセラレータ モード用のブロックの選択

アクセラレータ シミュレーション モードは、ノーマル モードでの実行と同じ様に、次のブロックを実行します。これらのブロックでは、アクセラレータ ビルド向けのコードが生成されないためです。このため、モデルにこれらのブロックが含まれる割合が高い場合は、アクセラレータ モードによってパフォーマンスが大幅に向上しない可能性があります。これらすべての Simulink® ブロックはインタープリター型コードを使用します。

メモ

ノーマル モードの出力がアクセラレータ モードの出力と正確に一致しない場合があります。これは 1 つのモデルにおいて、インタープリターによるバージョンとコンパイラによるバージョンで、数値の精度が多少異なるためです。

次のブロックは、既定の JIT アクセラレータ モードで実行すると、シミュレーション実行時のパフォーマンスが低下する可能性があります。

ラピッド アクセラレータ モード用のブロックの選択

コード生成をサポートしないブロック (SimEvents® など) や特定のターゲットのみに対してコードを生成するブロックは、ラピッド アクセラレータ モードではシミュレーションできません。

さらに、モデルに次のいずれかのブロックが含まれていると、ラピッド アクセラレータ モードは動作しません。

  • Interpreted MATLAB Function

  • Simulink Real-Time™ 製品または Freescale™ MPC555 向けのブロックなどのデバイス ドライバーの S-Function

メモ

ノーマル モードの出力がラピッド アクセラレータ モードの出力と正確に一致しない場合があります。これは 1 つのモデルにおいて、インタープリターによるバージョンとコンパイラによるバージョンでは、モデルの数値の精度が多少異なるためです。

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 の関数 mdlInitializeSizesSS_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 オブジェクトとして固定小数点データのログを記録する] (FixptAsFi) チェック ボックスの選択を無視します。

  • ラピッド アクセラレータ モードはバス オブジェクトをパラメーターとしてサポートします。

  • アクセラレータ モードとラピッド アクセラレータ モードは整数をできる限り小さく保存します。

  • Fixed-Point Designer™ はアクセラレータ モードまたはラピッド アクセラレータ モードで最小、最大、またはオーバーフローのデータを収集しません。

  • アクセラレータ モードは、Assertion ブロックを含め、限られた実行時の診断セットをサポートします。

  • ラピッド アクセラレータ モードは、Assertion ブロックを含め、限られた実行時の診断セットをサポートします。

ラピッド アクセラレータ モードでのスコープとビューアーの動作

ラピッド アクセラレータ モードでのスコープとビューアーの動作は、シミュレーションをコマンド ラインで実行するかメニューから実行するかによって決まります。

スコープまたはビューアー タイプメニューからのシミュレーションの実行コマンド ラインからのシミュレーションの実行
Simulink Scope ブロックノーマル モードと同じサポート
  • ログをサポート

  • スコープ ウィンドウが更新されていない

Simulink 信号ビューアーのスコープグラフィックスは更新されているが、ログはサポートされていないサポートされていない
その他の信号ビューアーのスコープエクスターナル モードでのサポートに制限サポートされていない
信号のログサポートされている。ラピッド アクセラレータ モードでの信号ログにリストされた制限ありサポートされている。ラピッド アクセラレータ モードでの信号ログにリストされた制限あり
マルチレート信号ビューアーサポートされていないサポートされていない
Stateflow® Chart ブロックノーマル モードと同じチャートのアニメーションのサポートサポートされていない

ラピッド アクセラレータ モードは、DSP System Toolbox™ スペクトル スコープや Communications Toolbox™ 散布図、信号の軌跡、またはアイパターン スコープなどのマルチレート信号ビューアーをサポートしません。

メモ

コマンド ラインからラピッド アクセラレータ モードを実行する場合は、スコープとビューアーは更新されませんが、メニューからモデルを実行したときには更新されます。ユーザー インターフェイスからのアクセラレータ モードの実行では、メニューからラピッド アクセラレータ モードを実行する方法を示しています。アクセラレータ モードのプログラムによる操作では、コマンド ラインからシミュレーションを実行する方法を示しています。

高速化を抑制する要素

  • モデルが以下のような場合は、アクセラレータ モードまたはラピッド アクセラレータ モードは使用できません。

    • 数値、論理、文字配列でなく、スパース配列である MATLAB® S-Function への配列パラメーターを渡すまたは 3 次元以上の配列パラメーターを渡す場合。

    • 複素数入力をもつ三角関数を含んでいる Fcn ブロックを使用する場合。

  • 外部コードまたはカスタム コードに関連付けられている変更によって、アクセラレータまたはラピッド アクセラレータのシミュレーション結果が変化しない場合があります。これには、次が含まれます。

    • TLC コード

    • rtwmakecfg.m ファイルを含む S-Function ソース コード

    • 統合されたカスタム コード

    • S-Function Builder

    この場合は、最上位モデルで強制的にコードを再生成することを検討してください。または、コード生成フォルダー (たとえば slprj または生成モデル コード フォルダー) を削除することによって、最上位モデル コードを強制的に再生成することもできます。

    メモ

    JIT アクセラレーションを使用すると、アクセラレーション ターゲット コードはメモリ内にあります。したがって、slprj フォルダを削除したとしても、モデルが開いている限り再利用可能です。

ラピッド アクセラレータ モードの制限

  • ラピッド アクセラレータ モードでは、以下をサポートしていません。

    • 代数ループ。

    • C++ で作成されたターゲット。

    • Interpreted MATLAB Function ブロック。

    • インライン化されていない MATLAB 言語または Fortran S-Function。Target Language Compiler (TLC) を使用して C で S-Function を作成するか、それらをインライン化しなければなりません。または、MEX ファイルを使用することもできます。詳細については、完全インライン化 S-Function の記述 (Simulink Coder)を参照してください。

    • デバッガーまたはプロファイラー。

    • Simulink.RunTimeBlock および Simulink.BlockCompOutputPortData ブロックの実行時オブジェクト。

  • モデル パラメーターは次のいずれかのデータ型でなければなりません。

    • boolean

    • uint8 または int8

    • uint16 または int16

    • uint32 または int32

    • single または double

    • 固定小数点

    • 列挙型

  • ラピッド アクセラレータ モードではシミュレーションを一時停止できません。

  • ラピッド アクセラレータのビルドに参照モデル (Model ブロックを使用) が含まれる場合、固定ステップ ソルバーを使用してコードを生成するようにこれらのモデルを設定します。ただし、最上位モデルでは、参照モデルのブロックが離散であれば、可変ステップ ソルバーを使用することが可能です。

  • 特定の状況では、ブロック パラメーターを変更すると、モデルのチェックサムも変更される構造的な変更がモデルに加えられることがあります。そのような変更の例として、DSP シミュレーションで遅延回数を変更する場合が挙げられます。このような場合は、モデルのコードを再生成しなければなりません。詳細については、高速化されたモデルでのコードの再生成を参照してください。

  • ルートの Inport について、ラピッド アクセラレータ モードはベースのみを Srcworkspace としてサポートします。

  • ルートの Inport について、ブロックで出力する最小値と最大値を指定する場合、ラピッド アクセラレータ モードはシミュレーション中にこれらの制限を認識しません。

  • ラピッド アクセラレータ モードでは、Function-Call Subsystem 内の To File または To Workspace ブロックは、関数呼び出し端子が Ground に接続されているか未接続の場合、ログ ファイルは生成しません。

  • ラピッド アクセラレータ モードは、RHEL / CentOS 6.x または 7.x を実行するシステムをサポートしていません。

予約キーワード

単語によっては、Simulink Coder™ コード言語、アクセラレータ モードおよびラピッド アクセラレータ モードで使用するために予約されているものもあります。これらのキーワードはサブシステム上の関数または変数名、またはエクスポートされたグローバル信号名であってはいけません。予約されたキーワードを使用すると、Simulink ソフトウェアはエラーを生成し、モデルのコンパイルと実行を行うことができません。

Simulink Coder 製品用に予約されたキーワードの一覧は、生成される識別子の構成 (Simulink Coder)にあります。アクセラレータ モードとラピッド アクセラレータ モードのみに適用されるこの他のキーワードは、以下のとおりです。

muDoubleScalarAbs muDoubleScalarCosmuDoubleScalarMod
muDoubleScalarAcos muDoubleScalarCoshmuDoubleScalarPower
muDoubleScalarAcoshmuDoubleScalarExpmuDoubleScalarRound
muDoubleScalarAsinmuDoubleScalarFloormuDoubleScalarSign
muDoubleScalarAsinh muDoubleScalarHypotmuDoubleScalarSin
muDoubleScalarAtan,muDoubleScalarLogmuDoubleScalarSinh
muDoubleScalarAtan2muDoubleScalarLog10muDoubleScalarSqrt
muDoubleScalarAtanhmuDoubleScalarMaxmuDoubleScalarTan
muDoubleScalarCeil muDoubleScalarMin muDoubleScalarTanh

関連する例

詳細