実行速度
生成した C/C++ コードの実行速度の向上
コード生成オプションや最適化を使用して、生成されたコードの実行速度を向上させます。動的メモリ割り当てを変更または無効化できます。これらは、実行速度に影響を与える可能性があります。並列化されたコードは parfor
ループを使用して生成できます。可能な場合は、最適化された既存の C コードと特殊なライブラリを利用して、実行速度を向上させます。
特定の条件に合わせたコードの最適化方法の詳細については、最適化手法を参照してください。
関数
coder.areUnboundedVariableSizedArraysSupported | Check if current configuration settings allow unbounded variable-size arrays (R2024a 以降) |
coder.ceval | 生成コードから C/C++ 関数を呼び出す |
coder.const | 生成コードでの定数への式の畳み込み |
coder.inline | 生成されたコードで現在の関数のインライン化を制御する |
coder.inlineCall | Inline called function in generated code (R2024a 以降) |
coder.loop.interchange | Interchange loop indices in generated code (R2023a 以降) |
coder.loop.parallelize | 生成コードで特定の for ループを並列化 (自動並列化を無効化) (R2021a 以降) |
coder.loop.reverse | Reverse loop iteration order in generated code (R2023a 以降) |
coder.loop.tile | Tile for -loops in the generated code (R2023a 以降) |
coder.loop.unrollAndJam | Unroll and jam for -loops in the generated code (R2023a 以降) |
coder.loop.vectorize | Vectorize for loops in generated code (R2023a 以降) |
coder.nonInlineCall | Prevent inlining of called function in generated code (R2024a 以降) |
coder.unroll | 各ループ反復でループ本体のコピーを作成することで、for ループを展開 |
coder.varsize | 可変サイズのデータの宣言 |
parfor | for ループを並列化する |
クラス
coder.BLASCallback | BLAS ライブラリと CBLAS ヘッダーおよび生成コードの BLAS 呼び出しのデータ型情報を指定する抽象クラス |
coder.LAPACKCallback | 生成されたコードでの LAPACK 呼び出しの LAPACK ライブラリおよび LAPACKE ヘッダー ファイルを指定するための抽象クラス |
coder.fftw.StandaloneFFTW3Interface | 生成されたコード内で FFTW 呼び出しに対して FFTW ライブラリを指定する抽象クラス |
coder.loop.Control | Loop optimization control object (R2023a 以降) |
トピック
生成コードの最適化
- 最適化手法
生成されたコードの実行速度またはメモリ使用量を最適化します。 - 生成コードの MATLAB Coder の最適化
生成コードのパフォーマンスを改善するには、コード ジェネレーターで最適化を使用します。 - 生成コードでの暗黙的な拡張の最適化
生成コードでの暗黙的な拡張は既定で有効になっています。
memcpy 最適化と memset 最適化
- memcpy 最適化
コード ジェネレーターはmemcpy
を使用して、生成されたコードを最適化します。 - memset の最適化
コード ジェネレーターはmemset
を使用して、生成されたコードを最適化します。
可変サイズの配列
- 動的メモリの割り当てとパフォーマンス
動的メモリ割り当てによって実行速度が遅くなることがあります。 - 動的メモリ割り当ての最小化
動的メモリ割り当てを最小化して実行時間を改善します。 - 可変サイズ配列の最大サイズの指定
コード ジェネレーターで可変サイズの配列の上限を決定する際に役立つ手法を使用します。 - コード生成時の動的メモリ割り当ての無効化
アプリまたはコマンド ラインで動的メモリ割り当てを無効にします。 - 動的メモリ割り当てしきい値の設定
特定のサイズより小さい配列の動的メモリ割り当てを無効にします。 - 動的な配列のアクセスの最適化
生成された C コードでの動的な配列の実行時間を改善する。
配列のレイアウト
- 行優先の配列レイアウトを使用するコードの生成
行要素がメモリに連続して格納される C/C++ コードを生成します。
ループ
- 並列 for ループ (parfor) を使用したアルゴリズムの高速化
parfor
ループの MEX 関数を生成します。 - parfor ループ内での変数の分類
parfor
ループ内の変数はループ変数、スライス化された変数、ブロードキャスト変数、リダクション変数または一時変数に分類されます。 - 並列 for ループ (parfor) を使用するコードの生成
共有メモリ上のマルチコア プラットフォームで並列に実行するループを生成します。 - parfor ループ内のスレッドの最大数の指定
特定の数の使用可能なコアでループ反復を並列に実行する MEX 関数を生成します。 - 生成コードで並列 for ループを実行するための最大スレッド数の指定
生成コードにおいて特定の数の使用可能なコアで並列for
ループを実行する。 - parfor ループ内のリダクション代入
リダクション変数は、すべてのループ反復に同時に依存する値を累積します。 - parfor ループのコンパイルの制御
parfor
ループを、単一のスレッドで実行されるparfor
ループとして処理します。 - macOS プラットフォームへの OpenMP ライブラリのインストール
OpenMP ライブラリをインストールして、macOS プラットフォームで並列for
ループを生成します。 - ループ内の冗長な演算の最小化
可能であれば演算をループ外に移動します。 - for ループおよび parfor ループの展開
ループ展開を制御します。 - 生成コードでの for ループの自動並列化
並列for
ループの反復はターゲット ハードウェアの複数のコアで同時に実行できます。 - Reduction Operations Supported for Automatic Parallelization of for-loops
Supported operations for automatic parallelization offor
-loops. - Generate SIMD Code from MATLAB Functions for Intel Platforms
Improve the execution speed of the generated code using Intel® SSE and Intel AVX technology. - Optimize Loops in Generated Code
Generate code with loop transformations according to your performance requirements.
関数呼び出し
- 生成されたコードでの関数入力のデータ コピーの回避
入力引数を参照渡しで渡すコードを生成する。 - 生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御
インライン化によって関数呼び出しのオーバーヘッドは排除されますが、大きい C/C++ コードが生成され、コードの可読性が低下する可能性があります。 - 関数呼び出しの定数への畳み込み
生成コードで式を定数に置き換えて実行時間を短縮します。
数値的なエッジ ケース
- 整数オーバーフローまたは非有限のサポートの無効化
整数オーバーフローまたは非有限を処理するサポート コードの生成を抑制してパフォーマンスを改善します。
外部コードの統合
- 生成されたコードでの LAPACK 呼び出し
LAPACK 関数の呼び出しによって、特定の線形代数関数に対して生成されたコードの実行速度を改善します。 - 生成されたコードでの BLAS 呼び出し
BLAS 関数の呼び出しによって、特定の低水準なベクトルと行列の演算用に生成されたコードの実行速度が改善します。 - 高速フーリエ変換関数の生成コードの最適化
ワークフローおよびターゲット ハードウェアに応じた正しい高速フーリエ変換の実装を選択する。 - 外部コードまたはカスタム コードの統合
独自に最適化したコードを統合してパフォーマンスを改善します。 - 生成されたスタンドアロン コードでの LAPACK 呼び出しを使用した線形代数の高速化
特定の線形代数関数に対して LAPACK 呼び出しを生成する。使用する LAPACK ライブラリを指定する。 - 生成されたスタンドアロン コードでの BLAS 呼び出しを使用した行列演算の高速化
特定の低水準行列演算の BLAS 呼び出しを生成します。使用する BLAS ライブラリを指定します。 - 生成されたスタンドアロン コードでの FFTW ライブラリ呼び出しを使用した高速フーリエ変換の高速化
高速フーリエ変換のための FFTW ライブラリ呼び出しを生成する。FFTW ライブラリを指定する。 - 生成されたスタンドアロン コードでのマルチスレッド アクセスの FFTW 計画との同期
FFT ライブラリ コールバック クラスのメソッドを実装し、サポート C コードを提供して FFTW 計画への同時アクセスを行わないようにする。
トラブルシューティング
parfor
ループのコード生成に関するエラーを診断します。
Resolve Issue: coder.inline("never") and coder.nonInlineCall Do Not Prevent Function Inlining
Troubleshoot instances of coder.inline('never')
not
preventing inlining.
macOS プラットフォームで生成された MEX がメモリに読み込まれたままの状態になる
ソース MATLAB® コードに parfor
ループの本体から到達可能なグローバル変数または永続変数が含まれている場合に発生する問題をトラブルシューティング。