Main Content

coder.isColumnMajor

Determine whether the current function or variable uses column-major layout

Description

example

coder.isColumnMajor resolves as true in the generated code if the current function uses column-major array layout. Use the function as the expression in control flow (if, else, switch) statements.

example

coder.isColumnMajor(arg) resolves as true if the current variable uses column-major array layout.

Examples

collapse all

To query the array layout of a function at compile time, use coder.isColumnMajor or coder.isRowMajor. This query can be useful for specializing your generated code when it involves row-major and column-major functions. For example, consider this function:

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

The function addMatrixRouted behaves differently depending on whether it uses row-major layout or column-major layout. The layout that the function uses, for example, can depend on whether it is called from a function that contains coder.rowMajor or coder.columnMajor. When addMatrixRouted uses row-major layout, it calls the addMatrix_OptimizedForRowMajor function, which has efficient memory access for row-major data. When the function uses column-major layout, it calls a version of the addMatrix function optimized for column-major data.

By using the query functions, the generated code for addMatrixRouted provides efficient memory access for either choice of array layout.

Consider the function bar:

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

Generate code:

codegen bar

To run the MEX function, enter:

bar_mex

Input Arguments

collapse all

Variable to query for array layout.

Example: coder.isColumnMajor(x);

Limitations

  • You cannot query the array layout of a structure field or property.

Tips

  • The code generator uses column-major layout by default.

  • Outside of code generation and simulation, coder.isColumnMajor is always true.

  • If coder.isColumnMajor always resolves to true for your code, other branches in the if statement are ignored by the code generator. Otherwise, one instance of the current function is created for each array layout.

Introduced in R2018a