Main Content

行優先の配列レイアウトのための内挿アルゴリズム

この例では、2 次元および 3 次元ルックアップ テーブルの行優先の配列レイアウトに最適化されている内挿アルゴリズムについて説明します。列優先の配列レイアウトに最適化されている内挿アルゴリズムも参照として示します。行優先の内挿アルゴリズムを使用して生成されたコードは、行優先の配列レイアウトのテーブル データを操作する場合に最適な速度とメモリ使用量によるパフォーマンスが得られます。列優先の内挿アルゴリズムを使用して生成されたコードは、列優先の配列レイアウトに最適です。

この例では次を行います。

  • 列優先および行優先アルゴリズムを使用する 2 次元ルックアップ テーブルへの内挿。

  • 行優先アルゴリズムおよび配列レイアウトを使用したコードの生成。

  • 配列レイアウトの特定と最適化されたアルゴリズムの選択。

  • 列優先および行優先アルゴリズムを使用する 3 次元ルックアップ テーブルへの内挿。

2 次元の行優先アルゴリズムを使用したシミュレーション

1. モデル例 RowLUT2D を開きます。

model = 'RowLUT2D';
open_system(model);

2. Simulink® の既定では、列優先のアルゴリズムおよび列優先の配列レイアウトを使用するモデルが設定されます。モデル RowLUT2D は、列優先アルゴリズムを使用するように設定されています。モデルをシミュレートします。出力を確認するには、[シミュレーション] タブからデータ インスペクターを開きます。出力値は 4 です。

3. 行優先アルゴリズムを有効にするために、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[数学とデータ型] ペインで、コンフィギュレーション パラメーターUse algorithms optimized for row-major array layoutを有効にします。あるいは、MATLAB® コマンド ウィンドウで次のように入力します。

set_param(model,'UseRowMajorAlgorithm','on');

4. モデルのシミュレーションを実行して、これらの結果をデータ インスペクターで確認します。出力値は 4 です。

列優先アルゴリズムと行優先アルゴリズムで異なるのは内挿順序のみです。場合によっては、同じデータセットに対する操作順序が異なることから、列優先アルゴリズムと行優先アルゴリズムの出力の数値にわずかな差が生じることがあります。モデル例で使用される 2 次元ルックアップ テーブルの内挿アルゴリズムを次に示します。

行優先アルゴリズムおよび配列レイアウトを使用したコードの生成

モデル RowLUT2D で使用される 2 次元テーブル データは、次のとおりです。

Table_3by2.Value
ans =

     1     4
     2     5
     3     6

1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[行優先の配列レイアウトに最適化されたアルゴリズムを使用] コンフィギュレーション パラメーターの有効化に加えて、[コード生成]、[インターフェイス] ペインで、コンフィギュレーション パラメーター配列のレイアウトを [Row-Major] オプションに変更します。このコンフィギュレーション パラメーターにより行優先のコード生成用のモデルが有効になります。あるいは、MATLAB コマンド ウィンドウで次のように入力します。

set_param(model, 'ArrayLayout','Row-major');

2. MATLAB の現在のフォルダーを書き込み可能なフォルダーに変更します。[C コード] タブで [ビルド] をクリックし、C コードを生成します。

3. 生成されたコードで、行優先の配列レイアウトのテーブル データを確認します。比較のため、列優先の配列レイアウト用に生成されたコード内のテーブル データを次に示します。

生成されたコードでは、テーブル データは行優先の順序であり、内挿アルゴリズムは行優先の配列レイアウトに最適化されています。行優先アルゴリズムはメモリ内で連続するテーブル データを操作します。これによりキャッシュ アクセスが高速になり、これらのアルゴリズムがキャッシュに対応するようになります。

以下の表に、配列レイアウトとキャッシュ対応のアルゴリズムとの関係をまとめています。優れたパフォーマンスを得るには、指定された配列レイアウトに最適化されているアルゴリズムを使用することをお勧めします。たとえば、コード生成用の配列レイアウトが [Row-Major] に設定されている場合は、行優先の内挿アルゴリズムを使用します。

3 次元のテーブルへの内挿

1. モデル例 RowInterpolationAlgorithm を開きます。

open_system('RowInterpolationAlgorithm');

2. 前の手順を使用してモデルのコードを生成します。RowLUT2D モデルで実行した手順を繰り返して、モデルのシミュレーションとコード生成を行います。

このモデル例で使用される 3 次元テーブルでの行優先および列優先の内挿を次に示します。

close_system('RowLUT2D',0);
close_system('RowInterpolationAlgorithm', 0);

関連するトピック