Main Content

model.rtw ファイルでのデータ参照

データ参照の概要

パラメーターや Constant ブロック I/O に対応するレコードなど、model.rtw ファイル内の一部のレコードでは、極めて大きいデータ値ベクトルが組み込まれることがあります。そのようなベクトルが原因で、コード生成時に大きなメモリのオーバーヘッドが生じることがあります。これは、このプロセスの間にメモリにテキストとして値を保持する必要があるからです。

そのようなオーバーヘッドを回避するために、既定では Simulink® ソフトウェアはデータ値ベクトル全体を model.rtw に書き出すことはしません。代わりに、"データ参照" と呼ばれるキーを書き込みます。このキーをコード生成時に使用して Simulink からデータに直接アクセスできます。データがコード生成時に変更されていない場合、データ値を含む実際のコードが書き出されると、そのデータはディスクに効率的にストリームされます。

データ参照の形式は SLData(index) です。ここで、index は、参照されているデータを Simulink に指示する数値です。GENERATE_FORMATTED_VALUE などの TLC 命令は、メモリ内に未展開の形式でデータ参照を格納します。生成コードがディスクに書き出されるときに、データ値は実際の値に展開されます。model.rtwModelParameters レコードに記述されているモデル パラメーターのデータ ベクトルにアクセスするには、関数 LibGetParameterValue を使用します。

データ参照しきい値の制御

既定では、モデル コンフィギュレーション パラメーター RTWDataReferencesMinSize に値を指定しなかった場合、コード ジェネレーターは値 -1 をパラメーターに代入します。ここでは、コード ジェネレーターはデータ ベクトルの代わりにモデル パラメーターのデータ参照を model.rtw ファイルに書き込みます。この最適化により、ファイルの読み取り/書き込み操作が削減され、コード生成時間が短縮されます。RTWDataReferencesMinSize パラメーターに正の値を指定すると、コード ジェネレーターは、データ ベクトルの代わりにデータ参照を model.rtw ファイルに書き込む際に基準とするしきい値サイズとしてその値を使用します。

ファイルにそのまま配置できるベクトルの最大長を変更するには、以下を使用します。

set_param(0, 'RTWDataReferencesMinSize', maxlen)

Simulink では、model.rtw の作成時に maxlen 以上の長さのベクトルがデータ参照に置き換えられます。maxlen は整数または inf として指定します。inf を指定すると、データ参照は無効になります。その場合、各ベクトルの完全な値セットは、どれだけ長くても、model.rtw にそのまま配置され、コード生成中にテキスト メモリを占有することになります。

明示的な maxlen の設定は、現在の MATLAB® セッションでのみ有効です。セッションをまたいで値を設定するには、startup.m ファイルに set_param コマンドを含めるか、MATLAB の起動時におけるコマンドの実行を自動化します。

データ参照の展開

オプションの 3 番目の expand 引数を指定した組み込み関数 GENERATE_FORMATTED_VALUE を使用して、データ参照を明示的に展開できます。FEVAL などのコマンドにより、データ参照が完全な形式に展開されることがあります。

データ参照の展開の回避

データ参照を完全にオフにするか、TLC で選択したパラメーターを展開すると、コード生成プロセス時に大きなテキスト メモリ オーバーヘッドが生じることがあります。ほとんどの一般的なコード生成タスクでは、展開されたデータ ベクトルをメモリに保持してオーバーヘッド コストを増加させる必要はありません。代替手段が利用できない場合を除いて、データ ベクトルの展開は回避してください。

コード生成の再開

データ参照を含む model.rtw ファイルを分離して使用してカスタム コード生成プロセスを再開することはできません。含まれているデータ参照は、コード生成プロセスが完了すると古くなります。このファイルのみを使用してコード生成プロセスを開始しようとすると、予測不能な動作やメモリ セグメンテーション違反が生じることがあります。

関連するトピック