Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

最適化手法

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

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

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

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

以下のような条件の場合、生成コードの実行速度を最適化するには、必要に応じて対応するアクションを実行します。

条件アクション
それぞれが独立した反復処理の for ループがある。

並列 for ループ (parfor) を使用するコードの生成

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

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

以下のような条件の場合、生成コードのメモリ使用量を最適化するには、必要に応じて対応するアクションを実行します。

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