主要内容

buildInstrumentedMex

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

描述

例子

buildInstrumentedMexfcn- gydF4y2Ba选项MATLAB翻译®文件fcn.m到一个MEX函数,并允许记录所有命名变量和中间变量的最小值和最大值。可选地,您可以为所有命名值、中间值和表达式值的log2直方图启用插装。的一般语法和选项buildInstrumentedMex而且fiaccel都一样,除了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 = code . constant (fidemos .fi_radix2twiddles(n));

生成一个仪表化的MEX函数。使用- o选项指定MEX函数名。使用柱状图选项计算直方图。(如果你有MATLAB编码器™许可证,您可能还想添加编码器选择。在这种情况下,使用buildInstrumentedMex testfft -coder -o 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

单击,查看变量的柱状图变量选项卡。

数字类型作用域的截图。

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

clearInstrumentationResultstestfft_instrumented

清除MEX功能后,再删除临时文件。

清晰的testfft_instrumented;tempdirObj.cleanUp;

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

函数Y1 = ep1(u)% # codegenY1 = u;结束
函数Y2 = ep2(u, v)% # codegenY2 = u + v;结束

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

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

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

Y1 = 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变量usingcoder.mexconfig.例如:

CFG = code .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不管的大小,Once保持不变一个.这个函数调用subfunN次数,因此是执行的总时间正比于N.然而,当被检测时,执行的时间subfun一旦成正比N^ 2。发生这种变化是因为最小和最大数据是在整个数组上计算的。当一个较大时,计算量会导致显著的性能下降。因此,只要可能,应该只传递函数实际需要的数据。

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

版本历史

在R2011b中引入