Main Content

coder.columnMajor

関数またはクラスに列優先の配列レイアウトを指定

説明

coder.columnMajor は、生成されたコードの現在の関数で使用されるデータに列優先の配列レイアウトを指定します。クラス コンストラクター内に配置した coder.columnMajor は、クラスで使用するデータに列優先のレイアウトを指定します。

メモ

コード生成では、既定で列優先の配列レイアウトが使用されます。

すべて折りたたむ

coder.columnMajor を関数本体に挿入して、関数に列優先の配列レイアウトを指定します。

myFunction はコードの最上位レベルの関数であるとします。アプリケーションでは、列優先の配列レイアウトでの行列の加算および行優先のレイアウトでの行列の乗算を実行できなければなりません。

function S = myFunction(A,B)
%#codegen
% check to make sure inputs are valid
if size(A,1) ~= size(B,1) || size(A,2) ~= size(B,2)
    disp('Matrices must be same size.')
    return;
end
% make both matrices symmetric
B = B*B';
A = A*A';
% add matrices
S = addMatrix(A,B);
end

行列加算の関数 addMatrix を記述します。addMatrix に列優先を指定するには、coder.columnMajor を使用します。

function S = addMatrix(A,B) 
%#codegen
S = zeros(size(A));
coder.columnMajor; % specify column-major array layout
S = A + B;
end

myFunction のコードを生成します。codegen コマンドを使用します。

codegen myFunction -args {ones(10,20),ones(10,20)} -config:lib -launchreport -rowmajor

codegen -rowmajor オプションにより、myFunction の行列乗算は行優先のレイアウトを使用します。ただし、addMatrix で生成されたコードは、coder.columnMajor の呼び出しにより列優先の配列レイアウトを使用します。

ヒント

  • コード ジェネレーターは、既定では列優先の配列レイアウトを使用します。

  • 関数内での配列レイアウトの指定は、codegen コマンドで指定された配列レイアウトよりも優先されます。たとえば、関数 foocoder.columnMajor が含まれている場合、次を使用してコードを生成したとします。

    codegen foo -rowmajor

    しかし、生成されたコードでは列優先のレイアウトが使用されます。

  • 列優先の関数内から呼び出された他の関数は、列優先の指定を継承します。ただし、呼び出された関数のいずれかに独自の異なる coder.rowMajor 呼び出しが含まれる場合、それに合わせてコード ジェネレーターは配列のレイアウトを変更します。行優先の関数と列優先の関数が、独自の配列レイアウトが指定されていない同じ関数を呼び出した場合、コード ジェネレーターは関数の行優先バージョンと列優先バージョンを生成します。

  • コード生成およびシミュレーションの範囲外では、coder.columnMajor は無視されます。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2018a で導入