生成された C/C++ および MEX コードの最適化
既定では、MATLAB® Coder™ では MATLAB コードから C/C++ コードまたは MEX 関数を生成するときに最適化が導入されます。詳細は、生成コードの MATLAB Coder の最適化を参照してください。
生成コードをさらに最適化するには、以下の処理を行うことができます。
MATLAB コードを適応させる。
コマンド ラインまたは [プロジェクトの設定] ダイアログ ボックスから構成オブジェクトを使用して、コード生成を制御する。
コードの最適化は、MATLAB Coder を使用したコード生成の概要のオプションのステップです。
速度を最適化する手法
次の表を使用して、生成されたコードの実行速度を最適化する方法を決定してください。
条件 | アクション |
---|---|
それぞれが独立した反復処理の for ループがコードに含まれている。 | |
MATLAB コードに可変サイズの配列がある。 | 動的メモリ割り当ての最小化 |
MATLAB コードに複数の可変サイズの配列がある。大きい配列には動的メモリ割り当てを、小さい配列には静的な割り当てを必要とする。 | 動的メモリ割り当てしきい値の設定 |
生成されたコード内の変数を参照によって渡す。 | 生成されたコードでの関数入力のデータ コピーの回避 |
ほとんどまたはすべての関数をインライン化することで、メモリ使用量を犠牲にして速度を最大化する。 | 生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御 |
定数のみを含む式のコードを生成しない。 | 生成コードでの定数への関数呼び出しの畳み込み |
MATLAB コードにループ インデックスに依存しないループ操作がある。 | ループ内の冗長な演算の最小化 |
MATLAB コードに整数演算が含まれており、生成されたコードの実行中に整数オーバーフローが発生しないことがわかっている。 | 整数オーバーフローのサポートの無効化 |
生成されたコードで非有限数値が使用されないことがわかっている。 | 非有限数のサポートの無効化 |
反復処理をほとんど行わない for ループがコードに含まれている。 | for ループおよび parfor ループの展開 |
ターゲット環境用に最適化されたレガシ C/C++ コードが既にある。 | 外部コードまたはカスタム コードの統合 |
基本的なベクトルおよび行列関数用に生成されたコードを高速化する。 | 生成されたスタンドアロン コードでの BLAS 呼び出しを使用した行列演算の高速化 |
線形代数関数用に生成されたコードを高速化する。 | 生成されたスタンドアロン コードでの LAPACK 呼び出しを使用した線形代数の高速化 |
高速フーリエ変換 (FFT) 関数用に生成されたコードを高速化する。 | 生成されたスタンドアロン コードでの FFTW ライブラリ呼び出しを使用した高速フーリエ変換の高速化 |
メモリ使用量を最適化する手法
次の表を使用して、生成されたコードのメモリ使用量を最適化する方法を決定してください。
条件 | アクション |
---|---|
MATLAB コードで条件付きステートメントを使用しているが、生成されたコードではそうしたステートメントの一部の分岐が必要ない。 | 未使用の実行パスのコード生成を防ぐ方法 |
生成されたコード内の変数を参照によって渡す。 | 生成されたコードでの関数入力のデータ コピーの回避 |
コード生成ターゲットのスタック領域が限られている。 | スタック領域使用量の制御 |
コード生成ターゲットのメモリが限られているため、多くの変数を含む関数のインライン化を回避する。 | 生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御 |
定数のみを含む式のコードを生成しない。 | 生成コードでの定数への関数呼び出しの畳み込み |
MATLAB コードにループ インデックスに依存しないループ操作がある。 | ループ内の冗長な演算の最小化 |
MATLAB コードに整数演算が含まれており、生成されたコードの実行中に整数オーバーフローが発生しないことがわかっている。 | 整数オーバーフローのサポートの無効化 |
生成されたコードで非有限数値が使用されないことがわかっている。 | 非有限数のサポートの無効化 |
コードの可読性が低下することになっても、大きな構造体または配列である変数のメモリ使用量を最適化する。 | 大きな配列と構造体の再利用 |