メインコンテンツ

生成された C/C++ および MEX コードの最適化

既定では、MATLAB® Coder™ では MATLAB コードから C/C++ コードまたは MEX 関数を生成するときに最適化が導入されます。詳細は、生成コードの MATLAB Coder の最適化を参照してください。

生成コードをさらに最適化するには、以下の処理を行うことができます。

  • MATLAB コードを適応させる。

  • コマンド ラインまたは [プロジェクトの設定] ダイアログ ボックスから構成オブジェクトを使用して、コード生成を制御する。

コードの最適化は、MATLAB Coder を使用したコード生成の概要のオプションのステップです。

速度を最適化する手法

次の表を使用して、生成されたコードの実行速度を最適化する方法を決定してください。

条件アクション
それぞれが独立した反復処理の for ループがコードに含まれている。

並列 for ループ (parfor) を使用したアルゴリズムの高速化

生成コードでの for ループの自動並列化

MATLAB コードに可変サイズの配列がある。動的メモリ割り当ての最小化
MATLAB コードに複数の可変サイズの配列がある。大きい配列には動的メモリ割り当てを、小さい配列には静的な割り当てを必要とする。動的メモリ割り当てしきい値の設定
生成されたコード内の変数を参照によって渡す。生成されたコードでの関数入力のデータ コピーの回避
ほとんどまたはすべての関数をインライン化することで、メモリ使用量を犠牲にして速度を最大化する。生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御
定数のみを含む式のコードを生成しない。生成コードでの定数への関数呼び出しの畳み込み
MATLAB コードにループ インデックスに依存しないループ操作がある。ループ内の冗長な演算の最小化
MATLAB コードに整数演算が含まれており、生成されたコードの実行中に整数オーバーフローが発生しないことがわかっている。整数オーバーフローのサポートの無効化
生成されたコードで非有限数値が使用されないことがわかっている。非有限数のサポートの無効化
反復処理をほとんど行わない for ループがコードに含まれている。for ループおよび parfor ループの展開
ターゲット環境用に最適化されたレガシ C/C++ コードが既にある。外部コードまたはカスタム コードの統合
基本的なベクトルおよび行列関数用に生成されたコードを高速化する。生成されたスタンドアロン コードでの BLAS 呼び出しを使用した行列演算の高速化
線形代数関数用に生成されたコードを高速化する。生成されたスタンドアロン コードでの LAPACK 呼び出しを使用した線形代数の高速化
高速フーリエ変換 (FFT) 関数用に生成されたコードを高速化する。生成されたスタンドアロン コードでの FFTW ライブラリ呼び出しを使用した高速フーリエ変換の高速化

メモリ使用量を最適化する手法

次の表を使用して、生成されたコードのメモリ使用量を最適化する方法を決定してください。

条件アクション
MATLAB コードで条件付きステートメントを使用しているが、生成されたコードではそうしたステートメントの一部の分岐が必要ない。未使用の実行パスのコード生成を防ぐ方法
生成されたコード内の変数を参照によって渡す。生成されたコードでの関数入力のデータ コピーの回避
コード生成ターゲットのスタック領域が限られている。スタック領域使用量の制御
コード生成ターゲットのメモリが限られているため、多くの変数を含む関数のインライン化を回避する。生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御
定数のみを含む式のコードを生成しない。生成コードでの定数への関数呼び出しの畳み込み
MATLAB コードにループ インデックスに依存しないループ操作がある。ループ内の冗長な演算の最小化
MATLAB コードに整数演算が含まれており、生成されたコードの実行中に整数オーバーフローが発生しないことがわかっている。整数オーバーフローのサポートの無効化
生成されたコードで非有限数値が使用されないことがわかっている。非有限数のサポートの無効化
コードの可読性が低下することになっても、大きな構造体または配列である変数のメモリ使用量を最適化する。大きな配列と構造体の再利用

参考

トピック