Main Content

coder.isRowMajor

現在の関数または変数が行優先のレイアウトを使用するかどうかを判別

説明

coder.isRowMajor は、現在の関数が行優先の配列レイアウトを使用する場合、生成コードで true として解決します。関数を制御フロー (ifelseswitch) ステートメントの式として使用します。

coder.isRowMajor(arg) は、現在の変数が行優先の配列レイアウトを使用する場合、true として解決します。

すべて折りたたむ

コンパイル時に関数の配列レイアウトをクエリするには、coder.isRowMajor または coder.isColumnMajor を使用します。このクエリは、行優先の関数と列優先の関数が関与するとき、生成されたコードを特殊化するのに役立つ場合があります。たとえば、以下の関数を考えます。

function S = addMatrixRouted(A,B)
 if coder.isRowMajor
     %execute this code if row major
     S = addMatrix_OptimizedForRowMajor(A,B); 
 elseif coder.isColumnMajor
     %execute this code if column major
     S = addMatrix_OptimizedForColumnMajor(A,B);
 end

関数 addMatrixRouted は、行優先のレイアウトまたは列優先のレイアウトのどちらを使用するかによって動作が異なります。関数が使用するレイアウトは、たとえば、coder.rowMajor または coder.columnMajor のどちらを含む関数から呼び出されるかによって決まります。addMatrixRouted は、行優先のレイアウトを使用する場合、関数 addMatrix_OptimizedForRowMajor を呼び出します。この関数は行優先のデータに対して効率的なメモリ アクセスを行います。この関数は、列優先のレイアウトを使用する場合、列優先のデータに対して最適化されたバージョンの関数 addMatrix を呼び出します。

クエリ関数を使用すると、addMatrixRouted で生成されたコードはどちらの配列レイアウトを選択しても効率的なメモリ アクセスを提供します。

関数 foo について考えます。

function foo
coder.rowMajor;
x = magic(3);
if coder.isRowMajor(x)
    fprintf('This will always be displayed in generated code.\n');
else
    fprintf('This will never be displayed in generated code.\n');
end
end

コードを生成します。

codegen foo

MEX 関数を実行するには、以下を入力します。

foo_mex

入力引数

すべて折りたたむ

配列レイアウトをクエリする変数

例: coder.isRowMajor(x);

制限

  • 構造体フィールドまたはプロパティの配列レイアウトをクエリできません。

ヒント

  • コード生成およびシミュレーションの範囲外では、coder.isRowMajor は常に false です。

  • コードで coder.isRowMajor が常に true に解決する場合、if ステートメント内の他のブランチはコード ジェネレーターで無視されます。それ以外の場合、配列レイアウトごとに現在の関数のインスタンスが 1 つ作成されます。

拡張機能

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

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

バージョン履歴

R2018a で導入