生成コードのルックアップ テーブル ブロックに対する最適化
範囲外入力をチェックするコードの削除
既定では、以下のルックアップ テーブル ブロック用に生成されるコードには、範囲外ブレークポイントまたはインデックス入力をチェックする条件文が含まれます。
より効率的なコードを作成するために、範囲外入力値から保護する条件文を削除することができます。
ブロック | 選択するチェック ボックス |
---|---|
1-D Lookup Table | 生成コードの範囲外入力に対する保護を削除 |
2-D Lookup Table | |
n-D Lookup Table | |
Prelookup | |
Interpolation Using Prelookup | 生成コードの範囲外インデックスに対する保護を削除する |
ブロックのダイアログ ボックスでこのチェック ボックスを選択すると、実行するステートメントの数が少なくなるため、コードの効率が向上します。ただし、セーフティ クリティカルなアプリケーションのコードを生成している場合、範囲のチェック コードを削除しないでください。
チェック ボックスの使用法を確認するために、次のモデル アドバイザーのチェックを実行し、推奨アクションを実行します。
モデル アドバイザー チェック | チェックを実行する場合 |
---|---|
[製品別] [Embedded Coder] [計算量が多い範囲外のチェック コードを生成する Lookup Table ブロックを識別します] | コード効率の場合 |
[製品別]、[Simulink Check]、[モデリング標準]、[DO-178C/DO-331 チェック]、[Lookup Table ブロックの使用をチェック] | セーフティ クリティカルなアプリケーションの場合 |
モデル アドバイザーの詳細については、Simulink® ドキュメンテーションのモデル アドバイザーを使用したモデルのチェックを参照してください。
ルックアップ テーブルのブレーク ポイント間隔の最適化
ルックアップ テーブル内のブレークポイントを調整可能な場合、間隔は生成コードの効率やメモリ使用量に影響しません。ブレークポイントが調整可能ではない場合、間隔のタイプが次の要因に影響を与える可能性があります。
要因 | 2 のべき乗の等間隔データ | 等間隔のデータ | 不等間隔のデータ |
---|---|---|---|
実行速度 | 実行速度は最速です。位置検索と内挿は等間隔データの場合と同じです。ただし、固定小数点データ型の速度を上げるために、ビット シフトが位置検索を、ビット マスクが内挿を置き換えます。 | 実行速度は、位置検索が高速で内挿にはシンプルな除算を使用するため、不等間隔データの場合よりも速くなります。 | 実行速度は、位置検索が遅く内挿には多くの演算が必要なため、最も遅くなります。 |
エラー | 一様でない曲率を使用する関数の近似には同じ精度を実現するために多くの点が必要になるので、不等間隔データの場合よりも誤差は大きくなります。 | 一様でない曲率を使用する関数の近似には同じ精度を実現するために多くの点が必要になるので、不等間隔データの場合よりも誤差は大きくなります。 | 一様でない曲率を使用する関数の近似には同じ精度を実現するため少ない点で済むので、誤差は小さくなります。 |
ROM の使用量 | コマンドの ROM 使用量は減りますが、データの ROM 使用量は増えます。 | コマンドの ROM 使用量は減りますが、データの ROM 使用量は増えます。 | コマンドの ROM 使用量は増えますが、データの ROM 使用量は減ります。 |
RAM の使用量 | わずかです。 | わずかです。 | わずかです。 |
以下のガイドラインに従います。
固定小数点データ型の場合、等間隔で 2 のべき乗のブレークポイントを使用します。
固定小数点以外のデータ型の場合、等間隔のブレークポイントを使用します。
ルックアップ テーブル ブロックでコード効率を向上させる方法を調べるために、次のモデル アドバイザーのチェックを実行し、推奨アクションを実行します。
[製品別] 、 [Embedded Coder] 、 [問題のある固定小数点演算を特定]
[製品別] 、 [Embedded Coder] 、 [計算量の多い固定小数点および飽和のコードを生成するブロックを特定]
モデル アドバイザーの詳細については、Simulink ドキュメンテーションのモデル アドバイザーを使用したモデルのチェックを参照してください。
ルックアップ テーブル ブロックのデータ コピーの削減
ワークスペース変数を使用して、ルックアップ テーブル ブロックのテーブルとブレークポイントのデータを格納した後に、これらの変数を調整可能な状態に構成すると、ブロック パラメーターや変数に同じデータ型を使用することでデータのコピーを回避できます。ワークスペース変数には、ベース ワークスペースなどのワークスペースやデータ ディクショナリに格納する MATLAB® 数値変数と Simulink.Parameter
オブジェクトが含まれます。変数のデータ型がブロック パラメーターのデータ型よりも小さい場合、生成されたコードは変数のデータ型をブロック パラメーターのデータ型に暗黙的にキャストします。この暗黙的なキャストにはデータのコピーが必要ですが、これによって RAM の消費量が大幅に増加し、大きなベクトルや行列のコード実行速度が遅くなる可能性があります。
詳細については、生成されたコードにおけるパラメーターのデータ型 (Embedded Coder)および生成されたコードにおける調整可能なキャリブレーション パラメーターの作成 (Simulink Coder)を参照してください。
行優先の配列レイアウトで効率的なコード
行優先の配列レイアウトで効率的なコードを生成するには、モデル コンフィギュレーション パラメーター [数学とデータ型] 、 [行優先の配列レイアウトに最適化されたアルゴリズムを使用] を選択します。行優先のアルゴリズムは、行優先の配列レイアウトのテーブル データについて演算を行うとき、最高の速度とメモリ使用で動作します。同様に、既定の列優先のアルゴリズムは、列優先の配列レイアウトで最もよく動作します。指定された配列レイアウトに最適化されたアルゴリズムを使用して最高のパフォーマンスを得ることを考慮してください。たとえば、コード生成中に配列レイアウトが行優先として設定されている場合、行優先のアルゴリズムを使用します。
配列のレイアウト | アルゴリズム | キャッシュ対応のアルゴリズム |
---|---|---|
列優先 | 列優先 | 推奨 |
行優先 | 行優先 | 推奨 |
行優先 | 列優先 | 非推奨 |
列優先 | 行優先 | 非推奨 |
詳細については、Lookup Table ブロックを使用してモデルを列優先レイアウトから行優先レイアウトに変換する (Simulink Coder)を参照してください。
参考
n-D Lookup Table | Prelookup | Interpolation Using Prelookup