主要内容

通用代码生成工作流

通用工作流代码生成的统计和机器学习工具箱™函数不是机器学习的对象函数模型描述的工作流程是一样的MATLAB®编码器™。有关详细信息,请参见开始使用MATLAB编码器(MATLAB编码器)。学习如何生成代码对象功能的机器学习模型,明白了介绍代码生成

这个例子简要解释了通用代码生成工作流总结在这个流程图:

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

定义入口点函数

一个入口点函数,也称为顶级函数是一个函数定义为代码生成。因为你不能调用任何函数在顶层codegen(MATLAB编码器),您必须定义一个入口点函数,调用code-generation-enabled函数,并生成C / c++代码的入口点函数的使用codegen。内的所有函数的入口点函数必须支持代码生成。万博1manbetx

添加% # codegen编译器指令(或编译指示)的入口点函数函数签名后,表明您打算为MATLAB算法生成代码。添加这个指令指示MATLAB代码分析器来帮助您诊断和解决违规,将导致错误在代码生成。看到检查代码的代码分析器(MATLAB编码器)

例如,来生成代码,估计一个数据集使用的四分位范围位差,定义这个函数。

函数r = iqrCodeGen (x)% # codegen% IQRCODEGEN估计四分位范围% x iqrCodeGen返回数据的四分位范围,%单一或双精度向量。r =差(x);结束
你可以允许通过指定可选的输入参数变长度输入宗量作为输入参数。有关详细信息,请参见可变长度参数列表的代码生成 (MATLAB编码器)为代码生成指定适应可变参数

生成代码

设置编译器

生成C / c++代码,您必须访问一个编译器配置正确。MATLAB编码器定位和使用支持,安装编译器。万博1manbetx查看和修改默认的C编译器,输入:

墨西哥人设置
更多细节,请参阅改变默认的编译器

使用生成代码codegen

设置编译器后,生成代码的入口点函数的使用codegen(MATLAB编码器)或者是MATLAB编码器应用,学习如何使用生成代码MATLAB编码器应用程序,请参阅通过使用MATLAB编码器应用生成墨西哥人功能(MATLAB编码器)

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

  • 指定数据类型和准确的输入数组的大小,通过MATLAB表达式表示的值和特定的数据类型和数组的大小。例如,指定所生成的代码iqrCodeGen.m必须接受一个双精度数字与100个元素列向量,输入:

    testX = randn (100 1);codegeniqrCodeGenarg游戏{testX}报告

    报告国旗生成一个代码生成报告。看到代码生成报告(MATLAB编码器)

  • 指定至少一个维度可以拥有任意长度,使用arg游戏选项coder.typeof(MATLAB编码器)如下。

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

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

    • size_vector输入数组的数组大小如果相应的variable_dims值是

    • size_vector是数组大小的上限,如果对应的吗variable_dims值是真正的

    • variable_dims指定是否每个维度的数组变量大小或一个固定的大小。的值真正的(逻辑1)意味着相应的维度有一个变量的大小;的值(逻辑0)意味着相应的维度有一个固定的大小。

    指定一个适应输入方便当你有数据和数目不详的观察在编译时。例如,指定所生成的代码iqrCodeGen.m可以接受任何长度的双精度数字列向量,输入:

    testX = coder.typeof(0[正无穷,1][1,0]);codegeniqrCodeGenarg游戏{testX}报告

    0example_value值意味着数据类型因为是默认的数值数据类型的MATLAB。(正,1)size_vector价值和(1,0)variable_dims值意味着第一维的大小是可变的和无限,和第二个维度的大小是固定的,是1。

    请注意

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

  • 指定一个字符数组,如支持名称-值对参数,指定字符数组常量使用万博1manbetxcoder.Constant(MATLAB编码器)。例如,假设“名字”是一个有效名称-值对的理由吗iqrCodeGen.m,和相应的值价值是数字。然后输入:

    codegeniqrCodeGenarg游戏{testX, coder.Constant(“名字”),值}报告

更多细节,请参阅在命令行生成C代码(MATLAB编码器)指定入口点函数输入的属性(MATLAB编码器)

构建类型

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

  • 墨西哥人(MATLAB可执行)函数

  • 独立的C / c++代码

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

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

  • 独立的C / c++代码编译为可执行

您可以指定构建类型使用配置选择codegen(MATLAB编码器)。设置代码生成选项的更多细节,请参阅配置构建设置(MATLAB编码器)

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

代码生成报告

您可以使用报告国旗产生代码生成报告。这份报告可以帮助您调试代码生成问题和视图生成的C / c++代码。有关详细信息,请参见代码生成报告(MATLAB编码器)

验证生成的代码

测试一个墨西哥人函数来验证生成的代码提供了相同的功能与原始MATLAB代码。执行这个测试,运行墨西哥人使用相同的输入函数用于运行最初的MATLAB代码,然后比较结果。运行墨西哥人在MATLAB函数生成独立的代码还可以检测并修复运行时错误,更难诊断在生成独立的代码。更多细节,请参阅为什么测试墨西哥人在MATLAB函数吗?(MATLAB编码器)

通过一些数据来验证是否位差,iqrCodeGen,iqrCodeGen_mex返回相同的四分位范围。

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

通过比较输出isequal

isequal (r, r_entrypoint, r_mex)

isequal返回逻辑1(真正的)如果所有的输入都是平等的。

你也可以验证函数使用一个测试文件和墨西哥人coder.runTest(MATLAB编码器)。有关详细信息,请参见从MATLAB代码生成测试代码(MATLAB编码器)

另请参阅

(MATLAB编码器)

相关的话题