主要内容

coder.isColumnMajor

确定当前函数或变量是否使用列优先布局

说明

如果当前函数使用列优先数组布局,则 coder.isColumnMajor 在生成的代码中解析为 true。将函数用作控制流(ifelseswitch)语句中的表达式。

示例

如果当前变量使用列优先数组布局,则 coder.isColumnMajor(arg) 解析为 true。

示例

示例

全部折叠

要在编译时查询函数的数组布局,请使用 coder.isColumnMajorcoder.isRowMajor。当涉及到行优先函数和列优先函数时,此查询对于特化您生成的代码很有用。以如下函数为例:

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 生成的代码为数组布局的任一选择项提供高效的内存访问。

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

生成代码:

codegen bar

要运行该 MEX 函数,请输入:

bar_mex

输入参数

全部折叠

要查询数组布局的变量。

示例: coder.isColumnMajor(x);

限制

  • 无法查询结构体字段或属性的数组布局。

提示

  • 默认情况下,代码生成器使用列优先布局。

  • 在代码生成和仿真期间外,coder.isColumnMajor 始终为 true。

  • 如果代码的 coder.isColumnMajor 始终解析为 true,则代码生成器将忽略 if 语句中的其他分支。否则,将为每个数组布局创建当前函数的一个实例。

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。

版本历史记录

在 R2018a 中推出