主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

行列および配列のコード生成

MATLAB®は,行列データおよび配列(1次元,二次元,…)を列優先の形式でベクトルとして格納します。金宝app动态仿真模块®およびコード ジェネレーターは、配列データを列優先または行優先の形式で格納できます。列優先のレイアウトで格納される配列の場合、列の要素はメモリ内で連続しています。行優先のレイアウトでは、行の要素が連続しています。配列レイアウトは、順番、形式、表現とも呼ばれます。要素を格納する順番は、統合、有用性、およびパフォーマンスにとって重要であることがあります。特定の順番で格納されたデータ上でパフォーマンスが向上するアルゴリズムもあります。

プログラミング言語および環境は,すべてのデータに対して単一の配列レイアウトを想定します。MATLABと Fortran は、既定で列優先のレイアウトを使用しますが、C と C++ は行優先のレイアウトを使用します。金宝app仿真软件编码器™では,行優先のレイアウトまたは列優先のレイアウトを使用するC / c++コードを生成できます。

コンピューター メモリへの配列の格納

コンピューターメモリは,データを1次元配列として格納します。たとえば、3 行 3 列の行列を宣言した場合、この行列はソフトウェアによって 9 つの要素をもつ 1 次元配列として格納されます。既定の設定では、MATLAB はこれらの要素を列優先の配列レイアウトで格納します。各列の要素はメモリ内で連続しています。

行列A.を考えます。

A = 1 2 3 4 5 6 7 8 9
A.は、この順序で長さ 9の配列に変換されます。
A(1)=A(1,1)=1;A(2)=A(2,1)=4;A(3)=A(3,1)=7;A(4)=A(1,2)=2;A(5)=A(2,2)=5;
などと続きます。

列優先の形式では、メモリ上の配列の次の要素にアクセスする場合は、その配列の最初のインデックスをインクリメントします。たとえば、次のそれぞれの要素の組はメモリにその順番で格納されます。

  • A(i)およびA(i+1)

  • B(i,j)およびB(i+1,j)

  • C(i,j,k)およびC(i+1,j,k)

既定では、行列A.は、メモリでは以下の配列で表現されます。

1 4 7 2 5 8 3 6 9

行優先の配列レイアウトでは、プログラミング言語は、行要素がメモリ内で連続するよう格納します。行優先のレイアウトでは、配列の要素は次のように格納されます。

1 2 3 4 5 6 7 8 9

N次元配列は、列優先または行優先のレイアウトで格納できます。列優先のレイアウトでは、最初 (左端) の次元またはインデックスの要素がメモリ内で連続します。行優先のレイアウトでは、最後 (右端) の次元またはインデックスの要素が連続します。

MATLABデータの内部表現形式の詳細については、MATLABデータを参照してください。

コード生成ソフトウェアが既定で列優先の形式を採用しているのには、いくつかの理由があります。

  • 信号および配列処理の世界では,MATLAB, LAPack, Fortran90, DSPライブラリをはじめとして,列優先の配列レイアウトが広く採用されています。

  • 列はフレームベースの処理におけるチャネルに相当します。このような場合には、列優先のストレージの方が効率が高くなります。

  • 列優先の配列はその要素である部分行列に対しても自己矛盾がありません。

    • 列優先の 2.次元配列は、1.次元配列の単純な連結です。

    • 列優先の 3.次元配列は、2.次元配列の単純な連結です。

    • 大步走は同じ次元の次の要素のインデックスとなるメモリ位置の数になります。最初の次元の 大步走は 1.要素です。N次元の要素の 大步走は、より低い次元のサイズの積になります。

    • 行優先のn次元配列では,最も高い次元の跨步は常に1です。部分行列を操作する場合は,通常はメモリ上に分散したデータへのアクセスです。そのため,効率的なインデックス化には不向きです。

Cでは行優先の形式が使用されます。MATLABおよび金宝app动态仿真模块では既定で列優先の形式が使用されます。行優先の配列レイアウトを使用するコードを生成するよう、コード生成ソフトウェアを設定できます。外部 C コードを生成されたコードと統合している場合、この表に示される考慮事項を参照してください。

アクション 考慮事項
コード生成用のモデルの配列レイアウトの設定。 [コンフィギュレーション パラメーター] ダイアログ ボックスで、モデル コンフィギュレーション パラメーター(配列のレイアウト][列優先]または[行優先]に設定します。
シミュレーションおよびコード生成に効率的な行優先アルゴリズムの有効化。 モデルコンフィギュレーションパラメーター(行優先の配列レイアウトに最適化されたアルゴリズムを使用)をオンにします。
行優先の配列レイアウトの外部 Cコード関数と生成されたコードの統合。

以下を使用して、外部コード関数を生成されたコードに統合する S函数を作成します。

C呼叫者ブロックを使用して、外部 C関数を 模拟で呼び出金宝appします。モデル コンフィギュレーション パラメーター[既定の関数配列のレイアウト]を使用して、カスタム C関数の配列レイアウトを指定します。

MATLAB函数ブロック内でcoder.cevalを使用することもできます。MATLAB函数ブロック内の行優先のデータとのインターフェイスを参照してください。

コード ジェネレーターの行列パラメーター

コンパイルされたモデルファイル模型.rtwは、MATLAB構文の文字ベクトルとして行列を表し、暗黙的なストレージ形式はありません。この形式を使用すると、.rtwファイルの文字ベクトルをコピーして MATLABファイルに貼り付け、MATLABに認識させることができます。

列優先のレイアウト

たとえば、常数ブロックの 3.行 3.列の行列、

1 2 3 4 5 6 7 8 9
は,模型.rtwに以下のように格納されます。
参数{标识符“Constant_Value LogicalSrc P0保护没有价值(1.0,4.0,7.0,2.0,5.0,8.0,3.0,6.0,9.0]CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy矩阵(1、4)[[0 1 0,0];]GraphicalRef矩阵(1、2)[[0,1];]BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, 1] VarGroupIdx (1,0) WasAccessedAsVariable 1}

模型_data.cファイルは行列パラメーターの実際の格納を宣言します。形式が列優先レイアウトであることがわかります。

参数模型P={/*表达式:[[1,2,3];[4,5,6];[7,8,9]*引用:“/常量”*/{1.0,4.0,7.0,2.0,5.0,8.0,3.0,6.0,9.0};

行優先のレイアウト

たとえば、常数ブロックの 3.行 3.列の行列、

1 2 3 4 5 6 7 8 9
は,模型.rtwに以下のように格納されます。
参数{Identifier“Constant_Value”LogicalSrc P0保护无值[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]CGTypeIdx 18容器类型IDX 19由矩阵(1,4)[[0,-1,0,0];]GraphicalRef矩阵(1,2)[[0,1];]BHMPrmIdx 0 GraphicalSource 0[0,1]所有者物理[0,-1]VarGroupIdx[1,0]是可访问的变量1}

模型_data.hファイルは行列パラメーターの実際の格納を宣言します。形式が行優先のレイアウトであることがわかります。

参数model_P ={/*表达式:[[1,2,3];(4、5、6);[7 8 9]]*引用:“< Root > /常数”* / {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0}};

複素数配列の内部データ ストレージ

金宝app模拟およびコード ジェネレーターの内部データ ストレージ形式と MATLABの内部データ ストレージ形式では、複素数配列のストレージのみが異なります。MATLABでは、実数部と虚数部は個別の配列に格納されます。模拟とコード ジェネレーターでは、実数部と虚数部はインターリーブされた形式で格納されます。メモリ中の数字は実数、虚数、実数、虚数というように交互に格納されます。この表現形式を使用することにより、模拟ライン上の小信号やMuxブロックおよびその他のバーチャルな信号操作ブロックについても効率的な実装が可能になります。たとえば、信号では入力を実際にコピーせず、単に参照します。

行優先のコード生成でサポートされていないブロック

コードジェネレーターは,行優先の配列レイアウトでのコード生成で以下のブロックをサポートしません。

不断的

  • 导数

  • 积分器

  • 积分器有限

  • 二阶积分器

  • 二阶积分有限公司

  • PID控制器

  • PID控制器(2DOF)

  • 状态空间

  • 传递函数

  • 运输延迟

  • 可变时延

  • 可变传输延迟

  • Zero-Pole

用户定义函数

  • 解释MATLAB函数

  • 二级MATLAB S函数

  • MATLAB系统

来源

  • 从电子表格

信号属性

  • 集成电路

行優先のコード生成の制限

  • 可変サイズ信号は行優先のコード生成でサポートされていません。

関連するトピック