パフォーマンス
メモリ使用量の削減、生成されたコードの実行速度の向上
コードの生成元となる Simulink®モデルを開発する場合は、モデル コンフィギュレーション パラメーターを使用して、RAM と ROM の消費量を減らし、コードの実行速度を向上させます。効率性の一部を犠牲にしてより防御的なコードにする場合は、これらのパラメーターの 1 つ以上を無効にできます。
メモリの使用量または実行速度の改善が必要なターゲット ハードウェアおよびコード セクションのリアルタイム要件を、生成されたコードが満たしているかどうかを確認する、コード実行プロファイリングを構成できます。また、コード生成アドバイザーを使用すると、モデルの現在のコンフィギュレーションがデバッグやコード実行に最適化されているかどうかを確認できます。
トピック
コード最適化の基礎
- コード生成速度の向上
モデルを変更してコード ジェネレーターによるコード生成速度を上げます。 - コード効率化ツールと手法による生成コードの最適化
モデル アドバイザーなどのツールおよびテクニックを適用してコード生成のためにモデルを最適化する。 - コンパイラの最適化の制御
makefile のコンパイラの最適化を Simulink UI レベルで制御します。
防御的プログラミング
- 非正規数の実行速度
非正規数計算のレイテンシのために実行に時間がかかったり、オーバーランする可能性を最小化します。 - 範囲外の浮動小数点を整数へ変換するコードの削除
アプリケーションにおける入力値が出力型の範囲にある場合、範囲外の浮動小数点から整数への変換コードを削除します。 - 南を整数0にマッピングするコードの削除
アプリケーションにNaN
の入力値が存在しない場合,NaN
を整数ゼロにマッピングするコードをコード ジェネレーターで削除するように指定します。 - 非有限数のチェックまたは数学関数のインライン化の無効化
コード置換ライブラリ (CRL) カスタマイズ エントリを使用して、数学関数の非有限数のチェックおよび数学関数のインライン化を選択的に無効化できます。
データ コピー削減
- ブロック出力時の中間結果の計算と保存の最小化
コード ジェネレーターは、モデル内の個々のブロックに対して別々のコード ステートメントとストレージ宣言を生成する代わりに、ブロック演算を単一の式に畳み込みます。 - 式の畳み込み
式の畳み込みでは、コードを最適化して、ブロック出力での中間結果の計算や、そのような中間結果の一時的なバッファーや変数への保存を最小にします。 - 生成されたコードにおけるローカル ブロック出力の有効化と再利用
可能な場合、コード ジェネレーターは、ブロック出力をローカル変数として宣言し、これらの変数を再利用できるようにします。 - バス信号の効率的なコードの生成
生成されたコードの効率性を最大化するためにバスをモデル化する。 - インライン不変信号
生成されたコード内でシンボリック名ではなく不変信号の数値を使用します。 - 関数 memcpy を使用したベクトルの代入に対する生成コードの最適化
コード ジェネレーターは、for
ループを関数memcpy
の呼び出しで置き換え、ベクトルの代入に対して生成されたコードを最適化します。 - バス信号の効率的なコードの生成
生成されたコードの効率性を最大化するためにバスをモデル化する。
メモリ使用量
- ベクトル演算の最適化
コード ジェネレーターは、一時ローカル配列をローカル変数に置き換えることで、スタック メモリを削減します。 - boolean 変数およびステート コンフィギュレーション変数に関するメモリ使用量の削減
ステート コンフィギュレーション変数とBoolean
変数を保存するメモリ量を削減します。 - 関数 memset を使用した生成コードの最適化
関数memset
は、型にかかわらず内部ストレージを整数ビット パターン 0 (つまり、全ビットがオフ) にクリアします。 - スタック領域の割り当てのカスタマイズ
スタックの最大許容サイズを制御し、生成されたコードでデータをローカルとグローバルのどちらで定義するのかに関する一部の制御を提供します。 - ループ展開のしきい値の構成
既定値の 5 からスタートし、コード ジェネレーターは信号またはパラメーターの配列の要素に値を割り当てるために、個別のステートメントではなくfor
ループの使用を開始します。 - 組み込みアプリケーションの単精度データ型の指定
たとえば、単精度プロセッサをターゲットとするなど、浮動小数点データ型が単精度のみのコードを生成します。 - ブロック パラメーターのデータ型を指定した効率的なコードの生成
さらに効率的なコードを生成するには、パラメーターのデータ型と信号のデータ型を一致させるか、パラメーターをさらにサイズが小さいデータ型で格納します。 - 論理信号の boolean データを使用した生成コードの最適化
コード ジェネレーターは、論理信号をBoolean
データ型として保存し、生成されたコードを最適化します。 - 時間カウンターのメモリ使用量の最適化
コード ジェネレーターが経過時間または絶対時間に割り当てるメモリを最適化します。
実行速度
- 複数の for 構造の組み合わせによる生成コードの最適化
コード ジェネレーターはデータの依存関係の解析を使用して、for
構造を組み合わせて静的なコード サイズとランタイム分岐を削減します。 - ループ展開のしきい値の構成
既定値の 5 からスタートし、コード ジェネレーターは信号またはパラメーターの配列の要素に値を割り当てるために、個別のステートメントではなくfor
ループの使用を開始します。 - 生成されたコードからのデッド コード パスの除去
コード ジェネレーターはデッド (つまり、未使用) コード パスを生成されたコードから除去します。 - 勾配設定を補正する浮動小数点の乗算
効率的な乗算をサポートするプロセッサの場合、勾配設定を補正する浮動小数点の乗算を使用して、コードの効率を向上します。 - 計算結果に影響しないブロックのコードの削除
コード ジェネレーターは、計算結果に影響しないコードを削除することで、実行速度を改善して ROM の消費を低減します。 - ブロック パラメーターの数値のインライン化
ブロック パラメーターのリテラル数値をインライン化し、グローバル RAM 使用量を軽減します。 - Simulink、Stateflow および MATLAB の固定小数点データを使用した生成コードの最適化
Simulink、Stateflow®および MATLAB®に固定小数点コードを生成します。 - アルゴリズム コード内でのターゲット最適化の生成
生成されたアルゴリズム コードをターゲット固有の最適化でカスタマイズします。 - 条件付き入力分岐実行の使用
Switchブロックと多端口Switchブロックでは、Simulink は制御入力と制御入力によって選択されたデータ入力を計算するブロックのみを実行します。 - 生成されたコードの複素数信号に対する最適化
コード ジェネレーターは、生成されたコードで信号を表す構造体に対し、さまざまな最適化を実行します。 - MATLAB Function ブロックからの生成コード内の線形代数の高速化
MATLAB Function ブロックで特定の線形代数関数に対して LAPACK 呼び出しを生成する。使用する LAPACK ライブラリを指定する。 - MATLAB Function ブロックからの生成コード内の行列演算の高速化
特定の低水準行列演算の BLAS 呼び出しを生成します。使用する BLAS ライブラリを指定します。 - MATLAB Function ブロックからの生成コード内の高速フーリエ変換の高速化
MATLAB Functionブロックの高速フーリエ変換に対する FFTW ライブラリ呼び出しを生成する。FFTW ライブラリを指定する。 - MATLAB Function ブロックからの生成コード内のマルチスレッド FFTW 計画の同期
FFT ライブラリ コールバック クラスのメソッドを実装し、サポート C コードを提供して FFTW 計画への同時アクセスを行わないようにする。 - MATLAB Function ブロック内の可変サイズ配列に対するメモリ割り当ての制御
MATLAB Functionブロックの動的メモリ割り当てを無効にする、または動的メモリ割り当てのしきい値を指定する。 - 固定小数点データを使用した信号処理アルゴリズムの速度とサイズの最適化
固定小数点音響ノイズ キャンセラーをモデル化する。 - Generate SIMD Code from Simulink Blocks
Improve the execution speed of the generated code using Intel SSE and Intel AVX technology. - Optimize Code for Reduction Operations by Using SIMD
Generate optimized code for reduction operations using SIMD instruction sets.
コード実行のプロファイル
- 生成コードのプロファイリングの実行
コード実行プロファイリングを使用して、コードの実行速度を観察します。