一般代码生成工作流程

统计和机器学习工具箱™功能的一般代码生成工作流不是机器学习模型的对象功能的功能与所描述的工作流相同马铃薯®编码器™。有关详细信息,请参阅开始使用Matlab编码器(MATLAB编码器)。要了解如何为机器学习模型的对象功能生成代码,请参阅代码生成简介

此示例简要介绍了如此流程图中汇总的一般代码生成工作流程:

定义入口点函数

一个入口点功能,也称为顶层或者基本的函数,是您为代码生成定义的函数。因为您无法使用顶级使用任何功能Codegen.(MATLAB编码器),您必须定义一个入门点函数,可调用启用代码生成的函数,并通过使用生成输入点功能的C / C ++代码Codegen.。入口点函数中的所有功能必须支持代码生成。万博1manbetx

添加%#codegen.编译器指令(或Pragma)到函数签名后的入门点函数,表示您打算为Matlab算法生成代码。添加此指令指示MATLAB代码分析仪帮助您诊断和修复在代码生成期间会导致错误的违规。看使用代码分析仪检查代码(MATLAB编码器)

例如,要生成估计使用数据集的间环范围的代码IQR.,定义此功能。

功能r = iqrcodegen(x)%#codegen.%iqrcodegen估计的四分位数范围%iqrcodegen返回数据x的四分位数范围,%单次或双精度矢量。r = iqr(x);结尾
您可以通过指定允许可选的输入参数varargin.作为输入参数。有关详细信息,请参阅可变长度参数列表的代码生成 (MATLAB编码器)指定代码生成的变量大小参数

生成代码

设置编译器

要生成C / C ++代码,您必须可以访问正确配置的编译器。Matlab编码器找到并使用支持的安装编译器。万博1manbetx要查看和更改默认的C编译器,请输入:

梅克斯-设置
有关更多详细信息,请参阅更改默认编译器

使用代码使用Codegen.

设置编译器后,通过使用生成输入点功能的代码Codegen.(MATLAB编码器)或者Matlab编码器应用程序。学习如何使用该方法生成代码Matlab编码器应用程序,参见使用MATLAB编码器应用程序生成MEX功能(MATLAB编码器)

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

  • 要指定数据类型和精确输入数组大小,请传递一个matlab表达式,该表达式表示具有某些数据类型和数组大小的一组值。例如,要指定生成的代码iqrcodegen.m.必须接受一个具有100个元素的双重精度数字列向量,输入:

    testx = Randn(100,1);Codegen.iqrcodegen.-  args.{testx}-报告

    -报告标志生成代码生成报告。看代码生成报告(MATLAB编码器)

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

    -args {coder.typeof(example_value.size_vector.变量_dims.)}
    价值example_value.size_vector., 和变量_dims.指定生成的代码可以接受的输入数组的属性。

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

    • size_vector.如果相应的输入阵列的数组大小是输入数组的变量_dims.价值是错误的

    • size_vector.如果相应的阵列大小的上限是阵列大小的变量_dims.价值是真的

    • 变量_dims.指定阵列的每个维度是否具有可变大小或固定大小。价值真的(逻辑1)表示相应的尺寸具有可变尺寸;价值错误的(逻辑0)表示相应的维度具有固定大小。

    指定在编译时具有未知观察数的数据时,可变尺寸输入很方便。例如,要指定生成的代码iqrcodegen.m.可以接受任何长度的双重精度数字列向量,输入:

    testx = coder.typeof(0,[Inf,1],[1,0]);Codegen.iqrcodegen.-  args.{testx}-报告

    0.为了example_value.值意味着数据类型是双倍的因为双倍的是matlab的默认数字数据类型。[INF,1]为了size_vector.价值和[1,0]为了变量_dims.值意味着第一维度的大小是可变的,并且无界限度,第二尺寸的大小固定为1。

  • 要指定字符数组,例如支持的名称值对参数,请将字符数组指定为常量万博1manbetx编码器.Constant.(MATLAB编码器)。例如,假设'名称'是一个有效的名称值对参数iqrcodegen.m.和相应的价值价值是数字。然后输入:

    Codegen.iqrcodegen.-  args.{testx,coder.constant('name'),value}-报告

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

构建类型

Matlab编码器可以为这些类型生成代码:

  • MEX(MATLAB可执行)功能

  • 独立C / C ++代码

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

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

  • 独立C / C ++代码编译为可执行文件

您可以使用使用的构建类型-Config.选择Codegen.(MATLAB编码器)。有关设置代码生成选项的更多详细信息,请参阅配置构建设置(MATLAB编码器)

默认,Codegen.生成MEX功能。MEX函数是可从MATLAB执行的C / C ++程序。您可以使用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 = iqr(testx);r_entrypoint = iqrcodegen(testx);r_mex = iqrcodegen_mex(testx);

使用使用比较输出是平等的

isequal(r,r_entrypoint,r_mex)

是平等的如果所有输入相等,则返回逻辑1(true)。

您还可以使用测试文件验证MEX功能编码器.RULEST.(MATLAB编码器)。有关详细信息,请参阅测试代码从MATLAB代码生成(MATLAB编码器)

也可以看看

(MATLAB编码器)

相关话题