コード置換とは
コード置換とは、アプリケーション コードの要件を満たすためにコード ジェネレーターが生成するコードの関数と演算子を変更する手法です。たとえば、生成コードを置き換えて次のような要件を満たすことができます。
特定のターゲット ハードウェアを含むがこれに限定されない、特定の実行時環境向けの最適化
既存のアプリケーション コードとの統合
AUTOSAR などの規格への準拠
非有限数またはインラインのサポートを有効または無効にするなどのコードの動作の変更
以下のようなアプリケーションまたはプロジェクト固有のコード要件
math.h
の消去システム ヘッダー ファイルの消去
memcpy
またはmemset
の呼び出しの消去BLAS の使用
特定の BLAS の使用
この手法を適用するには、コード ジェネレーターを構成してコード生成中にコード置換ライブラリ (CRL) を適用します。既定では、コード ジェネレーターはコード置換ライブラリを適用しません。MathWorks® が提供するライブラリ、および Embedded Coder® 製品を使用して作成および登録するライブラリから選択できます。使用可能なライブラリのリストは以下に応じて変わります。
インストールされているサポート パッケージ。
システム ターゲット ファイル、言語、言語標準、デバイス ベンダー構成。
Embedded Coder 製品を使用してライブラリを作成および登録したかどうか。
GNU99 拡張を含むライブラリは、GCC コンパイラと共に使用するためのものです。これらのライブラリのいずれかを別のコンパイラと共に使用すると、生成コードがコンパイルされない場合があります。
コード置換ライブラリ
"コード置換ライブラリ" は、関数と演算子のアプリケーション固有の実装を指定する、1 つ以上のコード置換テーブルから構成されています。たとえば、特定の組み込みプロセッサ用のライブラリは、生成コードをそのプロセッサ用に最適化する関数と演算子の置換を指定します。
"コード置換テーブル" には 1 つ以上の"コード置換エントリ" があり、各エントリは関数または演算子の可能な置換を表します。各エントリによって、関数または演算子の "概念表現" が "実装表現" と優先順位にマップされます。
テーブル エントリ コンポーネント | 説明 |
---|---|
概念表現 | テーブル エントリを識別します。コード ジェネレーター用の一致条件を含みます。以下から構成されます。
|
実装表現 | 置換コードを指定します。以下から構成されます。
|
優先順位 | テーブル内のその他のエントリに対するエントリ優先順位を定義します。値は 0 から 100 の範囲で、最も優先順位が高いのは 0 です。複数のエントリの優先順位が同じ場合、コード ジェネレーターはその優先順位の最初に一致するものを使用します。 |
コード ジェネレーターがコード置換ライブラリ内で一致するものを検索するときに、関数または演算子の概念表現を使用して "呼び出しサイト オブジェクト" が作成され、値が入力されます。一致が存在する場合、コード ジェネレーターは、実装表現により値が入力された、一致したコード置換エントリを使用して、コードを生成します。
コード ジェネレーターは、ライブラリ内のテーブルの順序で一致するものがあるかどうか、コード置換ライブラリ内のテーブルを検索します。コード ジェネレーターによりテーブルで複数の一致が検出された場合、一致は優先順位によって決まります。コード ジェネレーターは、優先順位が低い同様のエントリよりも、優先順位が高いエントリを使用します。
コード置換の用語
用語 | 定義 |
---|---|
キャッシュ ヒット | コード ジェネレーターが一致を検出した、指定されたコード置換ライブラリで定義されている関数または演算子のコード置換エントリ。 |
キャッシュ ミス | コード ジェネレーターが一致を検出しない関数または演算子の概念表現。 |
呼び出しサイト オブジェクト | コード ジェネレーターが関数または演算子の呼び出しサイトを検出した場合に使用する関数または演算子の概念表現。コード ジェネレーターはこのオブジェクトを使用して、概念表現が一致するかコード置換ライブラリをクエリします。一致が存在する場合、コード ジェネレーターは、概念表現、実装表現および優先順位の値が入力されたコード置換オブジェクトを返し、このオブジェクトを使用して置換コードを生成します。 |
コード置換ライブラリ | 関数と演算子のアプリケーション固有の実装を指定する、1 つ以上のコード置換テーブル。コード置換ライブラリを使用するように構成されている場合、コード ジェネレーターは、ライブラリで定義されている条件を使用して、一致を検索します。一致するものが見つかった場合、コード ジェネレーターは既定で生成されたコードを、ライブラリで定義されたアプリケーション固有のコードで置き換えます。 |
コード置換テーブル | 1 つ以上のコード置換テーブルのエントリ。異なるライブラリで使用する関連エントリまたは共有エントリをグループ化する方法を提供します。 |
コード置換エントリ | 関数または演算子の可能な置換を表します。関数または演算子の概念表現を実装表現および優先順位にマップします。 |
概念引数 | 置換する関数または演算子の入力引数または出力引数を表します。概念引数は、コード ジェネレーターにとって既知の命名規則 ('y1' , 'u1' , 'u2' , ...) とデータ型を観察します。 |
概念表現 | コード ジェネレーターが置換する関数と演算子の適合性評価に使用する一致条件を表します。以下から構成されます。
|
実装引数 | C または C++ 置換関数の入力引数または出力引数を表します。実装引数は、C/C++ の名前とデータ型の指定を観察します。 |
実装表現 | C または C++ 置換関数のプロトタイプを指定します。以下から構成されます。
|
キー | 置換される関数または演算子を指定します。関数名またはキーがコード置換エントリの概念表現で使用されます。キー RTW_OP_ADD は加算演算子を示します。 |
優先順位 | コード置換ライブラリ内で名前と概念引数リストが同じである、その他のエントリに対するコード置換エントリの一致優先順位を定義します。優先順位の値は 0 から 100 の範囲で、最も優先順位が高いのは 0 です。既定の設定は 100 です。ライブラリで関数または演算子に 2 つの実装が提供されている場合、優先順位が高い方の実装が低い方よりも優先されます。 |
コード置換の制限
コード置換検証 — コード置換は想定と異なる動作をする可能性があります。たとえば、コード ジェネレーター入力にみられるデータ型は、コード ジェネレーターが動作中に中間データ型として使用するものと一致しない場合があります。生成コードを調べることでコード置換を検証します。
行列のコード置換 — コード置換ライブラリは、動的およびシンボリック サイズの行列をサポートしません。