主要内容

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 的矩阵加法函数。使用 coder.columnMajoraddMatrix 指定列优先。

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 中的矩阵乘法使用行优先布局。然而,因为 coder.columnMajor 调用,为 addMatrix 生成的代码使用列优先数组布局。

提示

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

  • 函数内部的数组布局设定会取代用 codegen 命令指定的数组布局。例如,如果函数 foo 包含 coder.columnMajor,并且您使用以下命令生成代码:

    codegen foo -rowmajor

    则生成的代码仍使用列优先布局。

  • 从列优先函数中调用的其他函数会继承列优先设定。但是,如果被调函数之一有自己独特的 coder.rowMajor 调用,代码生成器会相应地更改数组布局。如果行优先函数和列优先函数调用同一个没有自己的数组布局设定的函数,代码生成器将生成该函数的行优先版本和列优先版本。

  • 在代码生成和仿真期间外,系统会忽略 coder.columnMajor

扩展功能

全部展开

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

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

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

版本历史记录

在 R2018a 中推出