Main Content

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

この例では、coder.const を使用して、生成コードで定数を指定する方法を示します。コード ジェネレーターでは、coder.const ステートメント内の式または関数呼び出しを、生成コードの定数に畳み込みます。生成コードでは毎回、式を評価したり、関数を呼び出したりする必要がないため、この最適化によって生成コードの実行時間が短縮されます。

入力 Shift を取り、それをベクトルの要素に追加する関数 AddShift を記述します。ベクトルは、最初の 10 個の自然数の二乗から構成されます。AddShift はこのベクトルを生成します。

function y = AddShift(Shift) %#codegen
y = (1:10).^2+Shift;

codegen コマンドを使用して、AddShift のコードを生成します。コード生成レポートを開きます。

codegen -config:lib -launchreport AddShift -args 0

コード ジェネレーターは、ベクトルを作成するコードを生成します。ベクトル作成中に Shift をベクトルの各要素に追加します。生成コードでの AddShift の定義は以下のようになります。

void AddShift(double Shift, double y[10])
{
  int k;
  for (k = 0; k < 10; k++) {
    y[k] = (double)((1 + k) * (1 + k)) + Shift;
  }
}

(1:10).^2coder.const((1:10).^2) で置き換え、それから codegen コマンドを使用して AddShift のコードを再度生成します。コード生成レポートを開きます。

codegen -config:lib -launchreport AddShift -args 0

コード ジェネレーターは最初の 10 個の自然数の二乗を含むベクトルを作成します。生成されたコードでは、Shift をこのベクトルの各要素に追加します。生成コードでの AddShift の定義は以下のようになります。

void AddShift(double Shift, double y[10])
{
  int i;
  static const signed char iv[10] = { 1, 4, 9, 16, 25, 36, 
                                 49, 64, 81, 100 };

  for (i = 0; i < 10; i++) {
    y[i] = (double)iv[i] + Shift;
  }
}

参考

関連するトピック