最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

実行速度

生成した C/C++ コードの実行速度の向上

コード生成オプションや最適化を使用して、生成されたコードの実行速度を向上させます。動的メモリ割り当てを変更または無効化できます。これらは、実行速度に影響を与える可能性があります。並列化されたコードは parfor ループを使用して生成できます。可能な場合は、最適化された既存の C コードと特殊なライブラリを利用して、実行速度を向上させます。

特定の条件に合わせたコードの最適化方法の詳細については、最適化手法を参照してください。

関数

parforfor ループを並列化する
coder.varsize可変サイズのデータの宣言
coder.const生成コードでの定数への式の畳み込み
coder.inline生成コードにおけるインライン化の制御
coder.unroll各ループ反復でループ本体のコピーを作成することで、for ループを展開
coder.ceval外部 C/C++ 関数の呼び出し

クラス

coder.LAPACKCallback生成されたコードでの LAPACK 呼び出しの LAPACK ライブラリおよび LAPACKE ヘッダー ファイルを指定するための抽象クラス
coder.BLASCallbackBLAS ライブラリと CBLAS ヘッダーおよび生成コードの BLAS 呼び出しのデータ型情報を指定する抽象クラス
coder.fftw.StandaloneFFTW3Interface 生成されたコード内で FFTW 呼び出しに対して FFTW ライブラリを指定する抽象クラス

例および操作のヒント

可変サイズの配列

動的メモリ割り当ての最小化

動的メモリ割り当てを最小化して実行時間を改善します。

可変サイズ配列の最大サイズの指定

コード ジェネレーターで可変サイズの配列の上限を決定する際に役立つ手法を使用します。

コード生成時の動的メモリ割り当ての無効化

アプリまたはコマンド ラインで動的メモリ割り当てを無効にします。

動的メモリ割り当てしきい値の設定

特定のサイズより小さい配列の動的メモリ割り当てを無効にします。

ループ

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

共有メモリ上のマルチコア プラットフォームで並列に実行するループを生成します。

parfor ループ内のスレッドの最大数の指定

特定の数の使用可能なコアでループ反復を並列に実行する MEX 関数を生成します。

parfor ループのコンパイルの制御

parfor ループを、単一のスレッドで実行される parfor ループとして処理します。

macOS プラットフォームへの OpenMP ライブラリのインストール

OpenMP ライブラリをインストールして、macOS プラットフォームで並列 for ループを生成します。

ループ内の冗長な演算の最小化

可能であれば演算をループ外に移動します。

for ループの展開

ループ展開を制御します。

関数呼び出し

関数入力の重複コピーの排除

同じ変数を関数の入力および出力として使用します。

コードのインライン化

インライン化によって関数呼び出しを関数本文と置き換えて、関数呼び出しのオーバーヘッドを排除します。

インライン化の制御

インライン化を制限して、生成されるコードのサイズとメモリ使用量を削減します。

関数呼び出しの定数への畳み込み

生成コードで式を定数に置き換えて実行時間を短縮します。

数値的なエッジ ケース

整数オーバーフローまたは非有限のサポートの無効化

整数オーバーフローまたは非有限を処理するサポート コードの生成を抑制してパフォーマンスを改善します。

外部コードの統合

外部コードまたはカスタム コードの統合

独自に最適化したコードを統合してパフォーマンスを改善します。

生成されたスタンドアロン コードでの LAPACK 呼び出しを使用した線形代数の高速化

特定の線形代数関数に対して LAPACK 呼び出しを生成する。使用する LAPACK ライブラリを指定する。

生成されたスタンドアロン コードでの BLAS 呼び出しを使用した行列演算の高速化

特定の低水準行列演算の BLAS 呼び出しを生成します。使用する BLAS ライブラリを指定します。

生成されたスタンドアロン コードでの FFTW ライブラリ呼び出しを使用した高速フーリエ変換の高速化

高速フーリエ変換のための FFTW ライブラリ呼び出しを生成する。FFTW ライブラリを指定する。

生成されたスタンドアロン コードでのマルチスレッド アクセスの FFTW 計画との同期

FFT ライブラリ コールバック クラスのメソッドを実装し、サポート C コードを提供して FFTW 計画への同時アクセスを行わないようにする。

概念

最適化手法

生成されたコードの実行速度またはメモリ使用量を最適化します。

動的メモリの割り当てとパフォーマンス

動的メモリ割り当てによって実行速度が遅くなることがあります。

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

parfor ループの MEX 関数を生成します。

parfor ループ内での変数の分類

parfor ループ内の変数はループ変数、スライス化された変数、ブロードキャスト変数、リダクション変数または一時変数に分類されます。

parfor ループ内のリダクション割り当て

リダクション変数は、すべてのループ反復に同時に依存する値を累積します。

生成コードの MATLAB Coder の最適化

生成コードのパフォーマンスを改善するには、コード ジェネレーターで最適化を使用します。

memcpy 最適化

コード ジェネレーターは memcpy を使用して、生成されたコードを最適化します。

memset の最適化

コード ジェネレーターは memset を使用して、生成されたコードを最適化します。

生成されたコードでの LAPACK 呼び出し

LAPACK 関数の呼び出しによって、特定の線形代数関数に対して生成されたコードの実行速度を改善します。

生成されたコードでの BLAS 呼び出し

BLAS 関数の呼び出しによって、特定の低水準なベクトルと行列の演算用に生成されたコードの実行速度が改善します。

行優先の配列レイアウトを使用するコードの生成

行要素がメモリに連続して格納される C/C++ コードを生成します。

トラブルシューティング

parfor ループのトラブルシューティング

parfor ループのコード生成に関するエラーを診断します。

macOS プラットフォームで生成された MEX がメモリに読み込まれたままの状態になる

ソース MATLAB® コードに parfor ループの本体から到達可能なグローバル変数または永続変数が含まれている場合に発生する問題をトラブルシューティング。

注目の例