一般代码生成工作流程
统计和机器学习工具箱™功能的一般代码生成工作流程不是机器学习模型的对象函数,与所描述的工作流相同MATLAB®CODER™。有关详细信息,请参阅开始使用MATLAB编码器(MATLAB编码器)。要了解如何为机器学习模型的对象函数生成代码,请参见代码生成简介。
该示例简要说明了此流程图中总结的一般代码生成工作流程:
定义入口点功能
一个入口点功能,也称为顶层或者基本的函数是您为代码生成定义的函数。因为您无法使用最高级别调用任何功能代码根
(MATLAB编码器),您必须定义一个调用启用代码生成功能的入口点功能,并通过使用用于入口点函数的C/C ++代码代码根
。入口点功能中的所有功能都必须支持代码生成。万博1manbetx
添加%#codegen
函数签名后,编译器指令(或PRAGMA)到入口点功能,以指示您打算为MATLAB算法生成代码。添加此指令指示MATLAB代码分析仪,以帮助您诊断和修复在代码生成期间会导致错误的违规行为。看使用代码分析仪检查代码(MATLAB编码器)。
例如,要生成使用使用的代码IQR
,定义此功能。
功能r = iqrcodegen(x)%#codegen%IQRCODEGEN估计四分位数%iqrcodegen返回数据x的四分位数范围%单位或双重矢量。r = iqr(x);结尾
varargin
作为输入参数。有关详细信息,请参阅可变长度参数列表的代码生成
(MATLAB编码器)和为代码生成指定变量尺寸参数。
生成代码
设置编译器
要生成C/C ++代码,您必须可以访问正确配置的编译器。MATLAB编码器找到并使用支持的,安装的编译器。万博1manbetx要查看和更改默认的C编译器,请输入:
梅克斯-设置
使用代码使用代码根
设置编译器后,通过使用来为入口点函数生成代码代码根
(MATLAB编码器)或者MATLAB编码器应用程序。学习如何使用MATLAB编码器应用,请参阅通过使用MATLAB编码器应用程序生成MEX函数(MATLAB编码器)。
要在命令行中生成代码,请使用代码根
(MATLAB编码器)。由于C和C ++是静态键入的语言,因此您必须在编译时确定入口点函数中所有变量的属性。调用时指定入口点函数的所有输入的数据类型和大小代码根
通过使用-args
选项。
要指定数据类型和精确输入数组大小,请传递MATLAB表达式,该MATLAB表达式表示具有特定数据类型和数组大小的值集。例如,从中指定生成的代码
iqrcodegen.m
必须接受具有100个元素的双精度数字列向量,请输入:testx = randn(100,1);代码根IQRCODEGEN-args{testx}-报告
这
-报告
标志生成代码生成报告。看代码生成报告(MATLAB编码器)。要指定至少一个维度可以具有任何长度,请使用
-args
选项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,[Inf,1],[1,0]);代码根IQRCODEGEN-args{testx}-报告
0
为了example_value
价值意味着数据类型是双倍的
因为双倍的
是MATLAB的默认数字数据类型。[INF,1]
为了size_vector
价值和[1,0]
为了variable_dims
值表示第一维的大小是可变且无限的,并且第二维的大小固定为1。笔记
可变大小输入的规范会影响性能。有关详细信息,请参阅控制可变大小数组的内存分配(MATLAB编码器)。
要指定字符数组(例如支持的名称值对参数),将字符数组指定为常数使用万博1manbetx
Coder.constant
(MATLAB编码器)。例如,假设'姓名'
是有效的名称值对参数iqrcodegen.m
,以及相应的值价值
是数字。然后输入:代码根IQRCODEGEN-args{testx,coder.constant('name'),value}-报告
有关更多详细信息,请参阅在命令行中生成C代码(MATLAB编码器)和指定入口点功能输入的属性(MATLAB编码器)。
构建类型
MATLAB编码器可以为这些类型生成代码:
MEX(MATLAB可执行)功能
独立C/C ++代码
独立C/C ++代码编译到静态库
独立C/C ++代码编译到动态链接的库
独立C/C ++代码编译为可执行文件
您可以使用-config
选项代码根
(MATLAB编码器)。有关设置代码生成选项的更多详细信息,请参阅配置构建设置(MATLAB编码器)。
默认,代码根
生成MEX功能。MEX函数是C/C ++程序,可从MATLAB执行。您可以使用MEX函数来加速MATLAB算法并测试生成的代码,以解决功能和运行时问题。有关详细信息,请参阅MATLAB算法加速度(MATLAB编码器)和为什么在MATLAB中测试MEX功能?(MATLAB编码器)。
代码生成报告
您可以使用-报告
标志以生成代码生成报告。该报告可帮助您调试代码生成问题并查看生成的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函数,并且coder.runtest
(MATLAB编码器)。有关详细信息,请参阅从MATLAB代码生成的测试代码(MATLAB编码器)。
也可以看看
代码根
(MATLAB编码器)