主要内容

通用代码生成工作流

统计和机器学习工具箱的通用代码生成工作流™ 不是机器学习模型的目标函数的函数与中描述的工作流相同MATLAB®编码器™.有关详细信息,请参见开始使用MATLAB编码器(MATLAB编码器)。要了解如何为机器学习模型的目标函数生成代码,请参阅代码生成简介

这个例子简要地解释了通用代码生成工作流,如流程图所总结的那样:

通用代码生成工作流。步骤1:定义一个入口点函数。步骤2:生成代码。步骤3:验证生成的代码。

定义入口点函数

入口点函数,也称为顶级函数,是为生成代码而定义的函数。因为不能使用编码基因(MATLAB编码器),您必须定义一个入口点函数来调用支持代码生成的函数,并通过使用编码基因.入口点函数中的所有函数都必须支持代码生成。金宝app

添加%#编码基因编译器指令(或pragma)指向函数签名后的入口点函数,以指示您打算为MATLAB算法生成代码。添加此指令将指示MATLAB代码分析器帮助您诊断和修复在代码生成过程中可能导致错误的冲突。请参阅用代码分析器检查代码(MATLAB编码器)

例如,使用。生成估计数据集四分位数范围的代码iqr,定义此函数。

函数r = iqrCodeGen (x)%#编码基因%IQRCODEGEN估计四分位范围% iqrCodeGen返回数据x的四分位范围,%单精度或双精度矢量。r =差(x);结束
您可以通过指定瓦拉金作为输入参数。有关详细信息,请参阅可变长度参数列表的代码生成 (MATLAB编码器)指定用于代码生成的可变大小参数

生成代码

设置编译器

要生成C/ c++代码,您必须访问配置正确的编译器。MATLAB编码器查找并使用受支持的已安装编译器。若要查金宝app看和更改默认C编译器,请输入:

墨西哥人设置
有关详细信息,请参见更改默认编译器

使用生成代码编码基因

在设置编译器之后,使用编码基因(MATLAB编码器)或者是MATLAB编码器了解如何使用MATLAB编码器应用程序,请参阅使用MATLAB编码器应用程序生成MEX函数(MATLAB编码器)

要在命令行生成代码,请使用编码基因(MATLAB编码器).因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。在调用时指定入口点函数的所有输入的数据类型和大小编码基因通过使用-args选择。

  • 要指定数据类型和精确的输入数组大小,请传递一个表示具有特定数据类型和数组大小的值集的MATLAB表达式。例如,指定生成的代码来自iqrCodeGen.m必须接受包含100个元素的双精度数字列向量,请输入:

    testX=randn(100,1);codegeniqrCodeGen-args{testX}报告

    这个报告标志生成代码生成报告。看到代码生成报告(MATLAB编码器)

  • 要指定至少一个尺寸可以具有任意长度,请使用-args选择coder.typeof(MATLAB编码器)如下。

    -args{coder.typeof(example_value,向量的大小,variable_dims)}
    价值观example_value,向量的大小,variable_dims指定生成的代码可以接受的输入数组的属性。

    • 输入数组具有与中的示例值相同的数据类型example_value

    • 向量的大小输入数组的大小是否对应variable_dims值是

    • 向量的大小如果数组大小的上限是相应的variable_dims值是真正的

    • variable_dims指定数组的每个维度的大小是可变的还是固定的。的值真正的(逻辑1)表示对应的维度大小可变;的值(逻辑0)表示对应维度具有固定大小。

    当您在编译时有数量未知的观测数据时,指定可变大小的输入非常方便。例如,指定生成的代码来自iqrCodeGen.m如果可以接受任意长度的双精度数字列向量,请输入:

    testX=coder.typeof(0[Inf,1],[1,0]);codegeniqrCodeGen-args{testX}报告

    0example_value值表示数据类型为因为是MATLAB的默认数字数据类型。[Inf,1]向量的大小价值和(1,0)variable_dims值表示第一个维度的大小是可变的且无限制的,而第二个维度的大小固定为1。

    笔记

    可变大小输入的规格会影响性能。有关详细信息,请参见控制可变大小数组的内存分配(MATLAB编码器)

  • 要指定字符数组,例如支持的名称-值对参数,请使用金宝app编码器。常数(MATLAB编码器).例如,假设“姓名”是的有效名称-值对参数iqrCodeGen.m,以及相应的值价值是数字。然后输入:

    编码基因iqrCodeGen-args{testX,coder.Constant('Name'),value}报告

有关详细信息,请参见在命令行生成C代码(MATLAB编码器)指定入口点函数输入的属性(MATLAB编码器)

构建类型

MATLAB编码器可以为以下类型生成代码:

  • MEX(MATLAB可执行文件)函数

  • 独立C/C++代码

  • 编译到静态库的独立C/C++代码

  • 编译到动态链接库的独立C/C++代码

  • 编译成可执行文件的独立C/ c++代码

可以使用-配置选择编码基因(MATLAB编码器)。有关设置代码生成选项的详细信息,请参阅配置构建设置(MATLAB编码器)

默认情况下,编码基因生成一个MEX函数。MEX函数是一个C/ c++程序,可在MATLAB中执行。您可以使用MEX函数来加速MATLAB算法,并测试生成的代码的功能和运行时问题。有关详细信息,请参见MATLAB算法加速(MATLAB编码器)为什么要在MATLAB中测试MEX函数?(MATLAB编码器)

代码生成报告

你可以使用报告标记以生成代码生成报告。此报表帮助您调试代码生成问题并查看生成的C/C++代码。有关详细信息,请参阅代码生成报告(MATLAB编码器)

验证生成的代码

测试MEX函数,以验证生成的代码是否提供了与原始MATLAB代码相同的功能。要执行此测试,请使用与运行原始MATLAB代码相同的输入运行MEX函数,然后比较结果。在生成独立代码之前在MATLAB中运行MEX函数,还可以检测和修复在生成的独立代码中很难诊断的运行时错误。有关详细信息,请参见为什么要在MATLAB中测试MEX函数?(MATLAB编码器)

传递一些数据来验证是否iqr,iqrCodeGen,iqrCodeGen_mex返回相同的四分位数范围。

testX = randn (100 1);r =差(testX);r_entrypoint = iqrCodeGen (testX);r_mex = iqrCodeGen_mex (testX);

使用等质量

isequal(r,r_入口点,r_mex)

等质量如果所有输入相等,则返回逻辑1(true)。

您还可以使用测试文件和验证MEX函数编码器运行测试(MATLAB编码器).有关详细信息,请参见测试代码生成的MATLAB代码(MATLAB编码器)

另见

(MATLAB编码器)

相关的话题