主要内容

buildInstrumentedMex

生成编译后的C代码函数,包括日志记录工具

描述

例子

buildInstrumentedMexfcn- gydF4y2Ba选项将MATLAB®文件fcn.m到MEX函数,并支持记录所有命名变量和中间变量的最小值和最大值的检测。还可以为所有命名值、中间值和表达式值的log2直方图启用检测功能。的一般语法和选项buildInstrumentedMexfiaccel都一样,除了buildIntstrumentedMex没有fi对象的限制并支持金宝app“编码器”选择。

例子

buildInstrumentedMexfcn_1……fcn_n”- - - - - -选项编码器翻译MATLAB函数fcn_1通过fcn_n到MEX函数,并支持记录所有命名变量和中间变量的最小值和最大值的检测。为多个入口点函数生成MEX函数需要“编码器”选择。

例子

全部折叠

创建一个被检测的MEX函数。运行测试台,然后查看记录的结果。

创建一个临时目录,然后从Fixed-Point Designer™导入一个示例函数。

tempdirObj = fidemo.fiTempdir (“buildInstrumentedMex”)复制文件(fullfile (matlabroot,“工具箱”“定点”...“fidemos”“fi_m_radix2fft_withscaling.m”),...“testfft.m”“f”

定义原型输入参数。

n = 128;x =复杂(0 (n, 1));W = coder.Constant (fidemo.fi_radix2twiddles (n));

生成一个仪表化的MEX函数。使用- o选项指定MEX函数名。使用柱状图选择计算直方图。(如果你有MATLAB编码器™许可证,您可能还想添加编码器选择。在这种情况下,使用testfft_instrumented -args {x,W}而不是下面这行代码。)

请注意

就像fiaccelbuildInstrumentedMex生成一个MEX函数。要生成C代码,请参见MATLAB编码器codegen(MATLAB编码器)函数。

buildInstrumentedMextestfft- otestfft_instrumented...arg游戏{x, W}柱状图

运行一个测试文件来记录测试结果。调用showInstrumentationResults打开报告。通过暂停报告中的一个变量来查看模拟的最小值和最大值以及整数状态。您还可以在表中看到双精度数字的建议数据类型。

I =1:20 y = testfft_instrumented(randn(size(x))));结束showInstrumentationResultstestfft_instrumented

通过单击查看变量的直方图变量选项卡。

有关图表的信息,请参阅NumericTypeScope参考页面。

关闭直方图显示,然后清除结果日志。

clearInstrumentationResultstestfft_instrumented

清除MEX函数,然后删除临时文件。

清晰的testfft_instrumented;tempdirObj.cleanUp;

在本地可写文件夹中,创建函数ep1.mep2.m

函数日元= ep1 (u)% # codegen日元= u;结束
函数Y2 = ep2(u, v)% # codegeny = u + v;结束

为两个入口点函数生成一个仪表化的MEX函数。使用- o选项指定MEX函数的名称。使用柱状图选择计算直方图。使用编码器选项来启用生成多个入口点buildInstrumentedMex函数。

u = 1:10 0;v = 5:104;buildInstrumentedMex- osharedmex...ep1arg游戏{你}...%入口点1ep2arg游戏{u, v}...%入口点2柱状图编码器

使用生成的MEX函数调用第一个入口点函数。

日元= sharedmex (“ep1”u);

使用生成的MEX函数调用第二个入口点函数。

y2 = sharedmex (“ep2”, u, v);

显示测量结果。

showInstrumentationResultssharedmex

请注意

为多个入口点函数生成MEX函数buildInstrumentedMex函数需要一个MATLAB编码器许可证。

输入参数

全部折叠

要测量的MATLAB入口点函数,指定为存在于当前工作文件夹或路径上的函数。入口点函数必须适合于代码生成。有关更多信息,请参见使MATLAB代码适合于代码生成(MATLAB编码器)

选择编译器选项。buildInstrumentedMex优先考虑单个命令行选项,而不是使用配置对象指定的选项。如果命令行选项冲突,则以最右边的选项为准。

arg游戏example_inputs

定义所有MATLAB函数输入的大小、类和复杂性。使用example_inputs来定义这些属性。example_inputs必须是指定与MATLAB函数相同的输入数量和顺序的单元格数组。

编码器

使用MATLAB编码器软件编译MEX文件,而不是默认的定点设计器fiaccel函数。这个选项删除fiaccel限制并允许完整的代码生成支持。金宝app你必须有一个MATLAB编码器使用此选项的许可。

配置config_object

指定MEX生成参数,基于config_object,定义为MATLAB变量使用coder.mexconfig.例如:

cfg = coder.mexconfig;

- dout_folder

将生成的文件存储在指定的绝对或相对路径下out_folder.如果指定的文件夹out_folder不存在,buildInstrumentedMex为你创造它。

如果不指定文件夹位置,buildInstrumentedMex生成默认文件夹中的文件:

fiaccel/墨西哥人/fcn

fcn是在命令行中指定的MATLAB函数的名称。

该函数不支持文件夹名称中的以下字符:金宝app)、问号()、dollar($)和pound ().

- g

在调试模式下编译MEX函数,关闭优化。如果不指定,buildinstrumentedMex以优化模式生成MEX函数。

全球global_values

在MATLAB文件中为全局变量指定初始值。使用单元格数组中的值global_values在编译的函数中初始化全局变量。单元格数组应该提供每个全局变量的名称和初始值。在编译之前必须初始化全局变量buildInstrumentedMex.方法提供全局变量的初始值全球选项,buildInstrumentedMex在MATLAB全局工作空间中检查变量。如果不提供初始值,buildInstrumentedMex生成一个错误。

生成的MEX代码和MATLAB都有自己的全局数据副本。为了确保一致性,您必须在两者交互时同步它们的全局数据。如果不同步数据,它们的全局变量可能会不同。

柱状图 计算所有命名值、中间值和表达式值的log2直方图。直方图列出现在代码生成报表表中。
-我包含路径

添加包含路径到代码生成路径的开始。

buildInstrumentedMex搜索代码生成路径第一个将MATLAB代码转换为MEX代码。

-launchreport

生成并打开代码生成报告。如果不指定此选项,buildInstrumentedMex仅在出现错误或警告消息或指定报告选择。

- ooutput_file_name

使用基名生成MEX函数output_file_name加上一个特定于平台的扩展。

output_file_name可以是文件名或包含现有路径。

如果不指定输出文件名,则基本名称为fcn_mex,它允许您运行原始MATLAB函数和MEX函数并比较结果。

- ooptimization_option

根据的值优化生成的MEX代码optimization_option

  • 启用:内联—启用功能内联

  • 禁用:内联—禁用功能内联

如果不指定,buildInstrumentedMex使用内联进行优化。

报告

生成代码生成报告。如果不指定此选项,buildInstrumentedMex仅在出现错误或警告消息或指定-launchreport选择。

提示

  • 你不能仪器MATLAB函数提供的软件。如果您的顶级函数是这样一个MATLAB函数,则不会记录任何内容。您也不能检测脚本。

  • 每次调用测试的MEX函数时,都会累积测试结果。使用clearInstrumentationResults清除日志中先前的结果。

  • 有些编码模式传递大量数据,但只使用其中的一小部分。在这种情况下,您可能会在使用时看到性能下降buildInstrumentedMex.在以下模式中,subfun只使用输入数组的一个元素,一个.对于正常执行,执行的时间量subfun一次是不变的,无论大小一个.这个函数调用subfunN时间,因此总执行时间成正比N.然而,当被仪器化时,执行时间subfun一旦成正比N^ 2。之所以会发生这种变化,是因为最小和最大数据是在整个数组中计算的。当一个时,计算可能导致显著的性能下降。因此,只要可能,您应该只传递函数实际需要的数据。

    函数A = topfun(A) N = numel(A);for i=1:N A(i) = subfun(A,i);函数b = subfun(A,i);end函数A = topfun(A) N = numel(A);for i=1:N A(i) = subfun(A(i));函数b = subfun(a) b = 0.5 * a;结束

介绍了R2011b