Real-Time Workshop User's Guide | ![]() ![]() |
Advancedページは、生成コードの性能に影響を与えるオプションを含みます。Advancedページは、2つの部分からなります。Model parameter configuration部分のオプションは、ブロックパラメータが生成コード内でどのように表現されるか、および外部コードとどのようにインタフェースを行うかを指定します。Optimizations部分のオプションは、メモリ使用量とコードの大きさ、効率を最適化するのに役立ちます。
Inline Parametersオプション
パラメータの値がワークスペース変数である場合、または, 単数または複数のワークスペース変数を含む式である場合、変数または式は、コード生成時に評価されます。ハードコードされた結果の値が生成コードに表示されます。インラインパラメータは、実際は定数に変換されているので、チューニングできません。つまり、外部コードには不可視であり、その値は、ランタイムに変更できません。
Model Parameter Configurationダイアログを使って、インライン化から個々のパラメータを削除し、チューニング可能に宣言することができます。チューニング可能なパラメータを宣言するとき、Real-Time Workshopはパラメータと外部コードとのインタフェースを行うストレージ宣言を生成します。これにより、手書きのコードはランタイムにパラメータ値を変更することができます。
Model Parameter Configurationダイアログは、ほとんどのパラメータをインライン化することによって全体の効率を向上させます。同時に、選択されたパラメータに対するランタイムのチューニングの柔軟性を保持します。
パラメータと外部コードとのインタフェースに関する情報は、「パラメータ: ストレージ、インタフェース、チューニング」を参照してください。
インラインパラメータによって、Simulinkは定数サンプル時間を伝達します。Simulinkは、モデルの起動時に1回、定数のサンプル時間をもつブロックの出力信号を計算します。これにより、ブロックはモデルの時間ステップ毎に出力を計算しないので、性能が向上します。
Simulinkは、すべてのインラインパラメータを不変定数に自動的に設定します(不変定数に関する情報は、Using Simulinkマニュアルを参照してください)。
Inline parametersを選択すると、つぎのようにコード生成パラメータに作用します。
Block Reductionオプション
このオプションが選択されると、Simulinkはブロックの集合を単一のより効果的なブロックにまとめるか、あるいはそれら全体を削除します。これにより、シミュレーション中および生成コード内のモデルの実行が高速化されます。ソースモデルの外観は変わりません。現在サポートされているブロックの縮小の最適化の種類は、以下の通りです。
int
であるint
タイプの変換ブロックは冗長であり、削除されます。Boolean Logic Signalsオプション
デフォルトでは、Simulinkは2つの信号がBoolean入力を優先するブロックに接続されていることを検出したときにエラーを発生しません。これは、doubleデータタイプのみをサポートするSimulinkの旧バージョンで作成されたモデルとの互換性を保証します。Boolean logic signalsオプションを選択することによって、厳密なBooleanタイプチェックを可能にすることができます。
このオプションを選択することを推奨します。生成されたコードは、メモリ使用量が少なくなります。これは、Boolean信号は一般的に1バイトの領域が必要ですが、一方でdoubleの信号は8バイトの領域が必要なためです。
Parameter Poolingオプション
パラメータプールは、複数のブロックパラメータが、別個に定義されていて構造的に同一であるストレージの位置を参照するときに発生します。最適化は、つぎのような宣言をもつCコンパイラの最適化と同じです。
int a[] = {1,2,3}; int b[] = {1,2,3};
そのような場合、コンパイラの最適化によりaおよびbは値1,2,3を含む単一のテキスト位置になり、同じコードからaおよびbを初期化します。
Real-Time Workshopでのパラメータプールの効果を理解するために、つぎのシナリオを考えます。
MATLABワークスペース変数a
および b
は、つぎのように定義されると仮定します。
a = [1:1000]; b = [1:1000];
aおよびbが、モデル内の2つのLook-Up Tableブロックの入力および出力値のベクトルとして利用されると仮定します。図 3-4は、モデルを示します。図 3-5は、Look-Up Table1
とLook-Up Table2
のパラメータとしてのaおよびbの使用を示します。
図 3-4: Look-Up Tableブロックに対してプールされたストレージをもつモデル
図 3-5: Look-Up Tableブロックのプールされたストレージ
Parameter poolingがオンの場合、プールされたストレージは、Look-Up Tableブロックの入出力データに対して用いられます。つぎのコードの部分で、モデル(rtP)
のグローバルパラメータ構造の定義を示します。入力データのa
およびb
への参照は、フィールドrtP.p2
にプールされます。同様に、出力データの参照(a
およびb
を含む式)は、フィールドrtP.p3
にプールされます。
typedef struct Parameters_tag { real_T p2[1000]; /* Variable: p2 * External Mode Tunable: no * Referenced by blocks: * <Root>/Look-Up Table1 * <Root>/Look-Up Table2 */ real_T p3[1000]; /* Expression: tanh(a) * External Mode Tunable: no * Referenced by blocks: * <Root>/Look-Up Table1 * <Root>/Look-Up Table2 */ } Parameters;
Parameter poolingがオフの場合、Look-Up Tableブロックの入力/出力データに対して別々の配列が宣言されます。ストレージは2回利用されます。
typedef struct Parameters_tag { real_T root_Look_Up_Table1_XData[1000]; real_T root_Look_Up_Table1_YData[1000]; real_T root_Look_Up_Table2_XData[1000]; real_T root_Look_Up_Table2_YData[1000]; } Parameters;
Parameter poolingオプションには、つぎの利点があります。
rtP
はグローバルベクトルです)model
.rtw
のサイズの削減によるコード生成速度の向上生成されたパラメータ名は、p
の後にReal-Time Workshopによって生成された数値が続きます。コメントは、どのブロックがプールされているかを示します。
Signal Storage Reuseオプション
このオプションによって、Real-Time Workshopは信号のメモリを再利用します。これは、リアルタイムプログラムのメモリ使用量を削減します。このオプションを選択することを推奨します。Signal storage reuse が利用不可能のとき、すべてのブロック出力はグローバルでユニークになり、多くの場合でRAMおよびROMの使用量が大きく増加します。
Signal storage reuseオプションの詳細については、「信号: ストレージ、最適化、インタフェース」を参照してください。
注意 Signal storage reuseを選択すると、Real-Time WorkshopページのGeneral code generation optionsカテゴリのLocal block outputsオプションも利用可能になります。「Local Block Outputsオプション」を参照してください。 |
![]() | Diagnostics ページオプション | Simulinkモデルで生成コードをトレースする | ![]() |