モデル参照のシミュレーション ターゲット
シミュレーション ターゲット
"シミュレーション ターゲット"、別名 "SIM ターゲット" は、アクセラレータ モードで実行される参照モデルを実装する MEX ファイルです。Simulink® はシミュレーション中に必要に応じて参照モデルの動作と出力を計算するためにシミュレーション ターゲットを呼び出します。Simulink は、参照階層内の任意の場所にある特定の参照モデルのアクセラレータ モード インスタンスすべてに対して、同じシミュレーション ターゲットを使用します。
Simulink Coder™ ライセンスがある場合は、参照モデルのシミュレーション ターゲットを次のような他のタイプのターゲットと混同しないように注意してください。
ハードウェア ターゲット — Simulink Coder がコードを生成する対象プラットフォーム
システム ターゲット — 目的に応じたコード生成の方法を Simulink Coder に指示するファイル
ラピッド シミュレーション ターゲット (RSim) — Simulink Coder が供給するシステム ターゲット ファイル
モデル参照ターゲット — 参照モデルの Simulink Coder コードを含むライブラリ モジュール
Simulink がシミュレーション ターゲットを作成するのは、参照階層内にアクセラレータ モードのインスタンスを 1 つ以上含む参照モデルに対してのみです。ノーマル モードでしか実行されない参照モデルは常にインタープリターで実行されるので、シミュレーション ターゲットは使用されません。ノーマル モードで実行されるインスタンスとアクセラレータ モードで実行されるインスタンスがそれぞれ 1 つ以上ある参照モデルの場合、次のようになります。
Simulink ではアクセラレータ モード インスタンスのためにシミュレーション ターゲットが作成されます。
ノーマル モードのインスタンスはこのシミュレーション ターゲットを使用しません。
アクセラレータ モードではコードを生成する必要があるので、ノーマル モードにはない、いくつかの要件と制限が適用されます。それらの制約を除けば、アクセラレータ モードで参照モデルを実行するときに、シミュレーション ターゲットとその詳細について考慮する必要は通常ありません。詳細は、アクセラレータ モードの参照モデルに適用される制限を参照してください。
シミュレーション ターゲットのビルド
既定の設定では、Simulink は次の場合に参照モデルから必要なシミュレーション ターゲットを生成します。
シミュレーションの開始時にシミュレーション ターゲットが存在しない場合
親モデルのダイアグラムを更新した場合
シミュレーション ターゲットが既に存在する場合、既定の設定では、最後にターゲットが生成されてから参照モデルに構造的な変更があったかどうかを、Simulink がチェックします。変更があった場合、Simulink はシミュレーション ターゲットを再生成してモデル内の変更を反映します。モデル参照ターゲットをリビルドするかどうかを Simulink で検出する方法の詳細は、「リビルド」 パラメーターのドキュメンテーションを参照してください。
この既定の動作は、Simulink が必ずリビルドする、または決してリビルドしないようにリビルドの条件を指定して変更できます。詳細は、「リビルド」を参照してください。
アクセラレータ モードの参照モデルのシミュレーション ターゲットを対話型で生成するには、次のいずれかの手順を実行します。
アクセラレータ モードのモデルを直接的または間接的に参照するモデルのブロック線図を更新する。
MATLAB® コマンド ラインで、
slbuildコマンドを適切な引数を付けて実行する。
シミュレーション ターゲットの生成中に、Simulink は MATLAB コマンド ラインにステータス メッセージを表示するので、生成過程を監視できます。ターゲットの生成では、コードの生成とコンパイルが行われ、コンパイルされたターゲット コードが標準コード ライブラリにあるコンパイルされたコードにリンクされ、実行可能ファイルが作成されます。
変更チェック時間の短縮
Simulink がリビルドを必要とするシミュレーション ターゲットがあるかどうかをチェックするために費やす時間を短縮するには、コンフィギュレーション パラメーターの値を次のように設定します。
階層全体のすべての参照モデル内で、[コンフィギュレーション パラメーター]、[診断]、[データ有効性]、[信号の関連付け] を
[明示的のみ]または[なし]に設定します。(「信号の関連付け」を参照)。変更の検出時間を最小限に抑えるために、最上位モデルの [コンフィギュレーション パラメーター]、[モデル参照]、[リビルド] オプションを
[既知の依存関係で任意の変更が検出された場合]に設定することを検討してください。「リビルド」を参照してください。
これらのパラメーターは参照モデルのコンフィギュレーション セット内にありますが、個々の Model ブロックにはありません。したがって、どちらの値も参照モデルの 1 つのインスタンスに設定すれば、そのモデルのすべてのインスタンスに設定されます。
シミュレーション ターゲット出力ファイルの制御
Simulink はシミュレーション ターゲットを作業フォルダーの slprj サブフォルダーに作成します。Simulink は、slprj が存在しなければ、作成します。
メモ: Simulink Coder のコード生成では |
既定の設定では、Simulink のブロック線図更新とモデル ビルドによって生成されたファイルは、ビルド フォルダーに配置されます。これは、現在の作業フォルダー (pwd) のルートです。しかし、場合によっては、現在の作業フォルダーの外部にあるルート フォルダーに生成ファイルを配置することが望ましいことがあります。たとえば、以下の場合です。
生成ファイルを生成するために使用するモデルおよびその他のソースを生成ファイルとは別にしておかなければならない場合。
現在の作業フォルダーを以前の作業フォルダーに設定し直さずに、以前にビルドしたシミュレーション ターゲットを再利用または共有する場合。
生成されたシミュレーション アーティファクトを生成された量産コードと分離することが望ましい場合もあります。
ブロック線図更新とモデル ビルドによって生成されたファイルの出力場所を制御するために、"シミュレーション キャッシュ フォルダー" のビルド フォルダーを個別に指定できます。シミュレーション キャッシュ フォルダーは、シミュレーションに使用するアーティファクトを配置するルート フォルダーです。
シミュレーション キャッシュ フォルダーを指定するには、次の "いずれかの" 方法を使用します。
CacheFolderMATLAB セッション パラメーターを使用します。
シミュレーションで使用するモデル ビルド アーティファクトの出力場所の制御
[Simulink 設定] 、 [一般] ダイアログ ボックスの Simulink ブロック線図の更新によって生成されるファイルの出力場所を制御するには、「[シミュレーション キャッシュ フォルダー]」設定を使用します。Simulink ブロック線図更新によって生成されたファイルのルート フォルダーの場所を指定するには、フォルダー パスを入力または参照して設定値を設定します。次に例を示します。
指定したフォルダー パスは、MATLAB セッション パラメーター CacheFolder の初期の既定の設定になります。Simulink ブロック線図更新を開始すると、生成されたすべてのファイルは、現在の作業フォルダー (pwd) ではなく、CacheFolder (存在する場合) によって指定されたルートの場所にあるビルド フォルダーに配置されます。
Simulink 設定を使用して 「[シミュレーション キャッシュ フォルダー]」 を設定する以外にも、get_param と set_param を使用して、コマンド ラインから設定値を取得および設定できます。たとえば、次のようにします。
>> get_param(0, 'CacheFolder')ans = ''>> set_param(0, 'CacheFolder', fullfile('C:','Work','mymodelsimcache'))>> get_param(0, 'CacheFolder')ans =C:\Work\mymodelsimcache現在の MATLAB セッションのビルド フォルダー設定のオーバーライド
参照モデルの更新時間の短縮
大きなモデル参照階層の並列ビルド
並列計算環境で、条件が満たされるときはいつでもアクセラレータ モードで構成される参照モデルを並列にビルドすることで、大きなモデル参照階層を含むモデルのブロック線図の更新速度を向上させることができます。たとえば、Parallel Computing Toolbox™ ソフトウェアがインストールされていると、各参照モデルの更新をマルチコア ホスト コンピューターのコアに分散できます。さらに MATLAB Distributed Computing Server™ ソフトウェアもインストールされている場合は、各参照モデルの更新を MATLAB Distributed Computing Server 構成内のリモート ワーカーに分散できます。
参照モデルの更新に並列ビルドを使用して実現されるパフォーマンスの向上は、特定のモデル参照階層で並列ビルドできるモデルの数、参照モデルのサイズ、利用可能なローカルまたはリモート ワーカー数やローカル マシンとリモート マシンのハードウェア属性 (RAM の容量、コア数など) の並列計算リソースを含む、いくつかの要因によって異なります。
条件が満たされるときはいつでも参照モデルをパラレル ビルドする一般的なワークフローに関する説明は、並列計算環境でのモデルの更新を参照してください。
並列ビルド構成要件
モデル参照階層の更新に並列ビルドを使用する場合には、次の要件が適用されます。
ローカル プールの場合、ホスト マシンは、使用するローカル ワーカーの数をサポートするために利用できる適切な RAM 容量 (MATLAB セッション) が必要です。たとえば、
parpool(4)を使用して 4 個のワーカーをもつ並列プールを作成すると、マシンでは MATLAB セッションが 5 個になり、それぞれ起動時に約 120 MB のメモリを使用します。並列ビルドに参加する MATLAB Distributed Computing Server のリモート ワーカーは、共通のプラットフォームとコンパイラを使用しなければなりません。
各 MATLAB ワーカー セッションでは、共有ベース ワークスペース変数や MATLAB パスの設定など、MATLAB クライアント セッションと同じ MATLAB 環境を設定しなければなりません。1 つの手段として最上位モデルの
PreLoadFcnコールバックを使用します。各 MATLAB ワーカー セッションで最上位モデルを読み込むようにモデルを設定している場合は、そのプリロード関数を任意の MATLAB ワーカー セッション セットアップに使用できます。
並列計算環境でのモデルの更新
モデル参照階層の並列ビルドを利用するには、次の手順を実行します。
並列計算環境にローカルまたはリモート MATLAB ワーカーのプールを設定する。
Parallel Computing Toolbox ソフトウェアの使用が認められインストールされていることを確認します。
リモート ワーカーを使用するには、MATLAB Distributed Computing Server ソフトウェアの使用が認められインストールされていることを確認します。
parpool(4)のような、ワーカー プールを設定する MATLAB コマンドを発行します。
[ビルドに対する MATLAB ワーカー初期化] で、次のいずれかの値を選択します。
[なし]特別なワーカー初期化を実行しない場合。モデル参照階層内の子モデルが、ベース ワークスペースで明示的にセットアップ (モデル読み込み関数をもつなど) された範囲を超えて依存するものがないときには、この値を指定します。[ベース ワークスペースをコピー]ベース ワークスペースを各ワーカーにコピーする場合。使用する複数のモデルにベース ワークスペースを用意するためにセットアップ スクリプトを使用するときには、この値を指定します。[最上位モデルの読み込み]各ワーカーに最上位モデルを読み込む場合。モデル参照階層内の最上位モデルがすべてのベース ワークスペース セットアップを扱う (モデル読み込み関数をもつなど) ときには、この値を指定します。
メモ: 適用するモデル参照階層の最上位モデルに [並列モデルの参照ビルドを有効化] を設定するだけで済みます。
オプションで、シミュレーション ビルドの詳細なメッセージを有効にします。詳細なビルドを選択した場合、ビルド メッセージは、モデル名とともに、各並列ビルドの進行状況を報告します。
シミュレーション ターゲット ビルドの詳細なメッセージを有効にするには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [すべてのパラメーター] タブに移動し、[詳細なアクセラレータのビルド] を選択します。
[詳細なアクセラレータのビルド] オプションは、MATLAB コマンド ウィンドウと並列ビルド ログ ファイルの両方におけるビルド メッセージの詳細度を制御します。
オプションで、モデルの依存関係に基づき、モデル参照階層を調べて並列に作成するモデルを特定します。たとえば、Simulink の [解析] 、 [モデルの依存関係] メニューから、モデル依存関係ビューアーを使用できます。
モデルを更新します。MATLAB コマンド ウィンドウのメッセージが、パラレル ビルドまたはシリアル ビルドの開始および終了時刻を記録します。
並列ビルド ログの保存場所
参照モデルをパラレル ビルドするモデルを更新する際、詳細なビルドが有効な場合は、MATLAB コマンド ウィンドウのメッセージが各パラレル ビルドまたはシリアル ビルドの開始および終了時刻を記録します。たとえば、以下のようにします。
### Initializing parallel workers for parallel model reference build.### Parallel worker initialization complete.### Starting parallel model reference SIM build for 'bot_model001'### Starting parallel model reference SIM build for 'bot_model002'### Starting parallel model reference SIM build for 'bot_model003'### Starting parallel model reference SIM build for 'bot_model004'### Finished parallel model reference SIM build for 'bot_model001'### Finished parallel model reference SIM build for 'bot_model002'### Finished parallel model reference SIM build for 'bot_model003'### Finished parallel model reference SIM build for 'bot_model004'
並列ビルドについての詳細情報を取得するには、並列ビルド ログを調べることができます。パラレル ビルドされた個々の参照モデルに対して、ビルド プロセスは という形式の名前をもつファイルを生成します。ここで、model_buildlog.txt は参照モデルの名前になります。このファイルにはそのモデルの完全なビルド ログが含まれています。model
並列ビルドが完了すると、参照モデルに対応するビルド サブフォルダー内にビルド ログ ファイルが作成されます。たとえば、参照モデル bot_model004 のビルドの場合は、参照モデル サブフォルダー でビルド ログ ファイル build_folder/slprj/sim/bot_model004bot_model004_buildlog.txt を調べます。
並列ビルドが失敗した場合、次のような出力が表示される場合があります。
### Initializing parallel workers for parallel model reference build.### Parallel worker initialization complete.### Starting parallel model reference SIM build for 'bot_model002'### Starting parallel model reference SIM build for 'bot_model003'### Finished parallel model reference SIM build for 'bot_model002'### Finished parallel model reference SIM build for 'bot_model003'### Starting parallel model reference SIM build for 'bot_model001'### Starting parallel model reference SIM build for 'bot_model004'### Finished parallel model reference SIM build for 'bot_model004'### The following error occurred during the parallel model reference SIM build for'bot_model001':Error(s) encountered while building model "bot_model001"### Cleaning up parallel workers.
並列ビルドが失敗した場合、ビルド サブフォルダー /par_mdl_ref/ の下にある参照モデル サブフォルダーにビルド ログ ファイルがあります。たとえば、モデル modelbot_model001 の並列ビルドが失敗した場合は、サブフォルダー でビルド ログ ファイル build_folder/par_mdl_ref/bot_model001/slprj/sim/bot_model001bot_model001_buildlog.txt を調べます。