主要内容

通过使用概要文件墨西哥人功能MATLAB分析器

您可以配置文件执行时间墨西哥人由MATLAB函数®通过使用MATLAB分析器编码器™。的概要文件生成的代码显示了调用的数量和每一行的时间相应的MATLAB函数。使用分析器来识别产生的行MATLAB代码生成的代码,需要很长时间。这些信息可以帮助您在开发周期的早期发现和纠正性能问题。MATLAB分析器的更多信息,请参阅配置文件概要文件代码来提高性能

分析器的图形界面不支持万博1manbetxMATLAB在线™

墨西哥人形象代

您可以使用MATLAB分析器与生成的墨西哥人的功能。或者,如果你有一个测试文件,调用MATLAB函数,您可以生成墨西哥人的功能和配置它在一个步骤。您可以在命令行上执行这些操作,或者在MATLAB编码器的应用。

与生成的墨西哥人使用分析器功能:

  1. 使墨西哥人分析通过设置对象属性的配置EnableMexProfiling真正的

    或者,您可以使用codegen配置文件选择。

    相当于设置在MATLAB编码器的应用使执行分析生成的一步。

  2. 生成墨西哥人文件MyFunction_mex

  3. MATLAB运行分析器并查看概要总结报告,会在单独的窗口中打开。

    配置文件;MyFunction_mex;配置文件查看器;

    确保你没有改变或移动原MATLAB文件MyFunction.m。否则,分析器不考虑MyFunction_mex剖析。

如果你有一个测试文件MyFunctionTest.m调用MATLAB函数,您可以:

  • 生成墨西哥人它在一个步骤通过使用功能和概要文件codegen以及配置文件选项。如果你打开了MATLAB分析器,关机前一起使用这两个选项。

    codegenMyFunction以及MyFunctionTest配置文件
  • 通过选择概要文件的墨西哥人功能使执行分析验证一步的程序。如果你打开MATLAB分析器,关掉再执行此操作。

例子

您使用分析器来识别函数或MATLAB代码产生的行生成的代码,需要很长时间。下面是一个例子,一个MATLAB函数,将其输入矩阵的表示一个B行和列为主的布局在一线。这样的转换有很长的执行时间对大型矩阵。避免了转换通过修改这个线会使函数更有效率。

考虑MATLAB函数:

函数[y] = MyFunction (A, B)% # codegen%生成的代码使用的行表示矩阵A和Bcoder.rowMajor;长度=大小(1);%总结所有元素的绝对值和B通过遍历%矩阵行,行sum_abs = 0;行= 1:长度坳= 1:长度sum_abs = sum_abs + abs((行)上校)+ abs (B(行)上校);结束结束% C调用外部函数foo。c '返回所有元素的和%的A和B金额= 0;和= coder.ceval (“foo”coder.ref (A), coder.ref (B),长度);%返回sum_abs的差异和总和y = sum_abs -总和;结束

这个函数使用生成的代码的行表示平方矩阵一个B。该代码首先计算sum_abs(所有元素的绝对值的总和一个B)通过遍历矩阵行,行。该算法优化矩阵,表示在一个行布局。然后使用的代码coder.ceval调用外部C函数foo.c:

# include < stdio。h > # include < stdlib。h > # include " foo。h“双重foo(双*,双* B,双长度){int i, j s;双金额= 0;s = (int)长度;/ *求和的所有元素A和B * / (i = 0;我< *年代;我+ +){总和+ = B[我]+[我];}返回(总和);}

相应的C头文件foo。是:

# include“rtwtypes。h”双foo(双*,双* B,双长度);

foo.c返回变量总和元素的总和一个B。函数的性能foo.c独立于矩阵是否一个B表示行或列为主的布局。MyFunction回报的差异sum_abs总和

你可以测量的性能MyFunction对于大型输入矩阵一个B,然后进一步优化:

  1. 使墨西哥人分析并生成墨西哥人代码MyFunction。运行MyFunction_mex两个大的随机矩阵一个B。查看概要总结报告。

    一个=兰德(20000);B =兰德(20000);codegenMyFunctionarg游戏{A、B}foo.cfoo。配置文件配置文件;MyFunction_mex (A, B);配置文件查看器;

    一个单独的窗口显示概要总结报告。

    概要总结展示表与字段函数名调用,总时间以秒为单位,自我时间在秒和总时间的情节。火焰图像,代表表在一个条形图。

    概要总结报告显示的总时间和墨西哥人的自我时间文件和它的孩子,这是最初的MATLAB函数所生成的代码。

  2. 在函数名,单击第一个链接查看配置文件详细报告生成的代码MyFunction。你可以看到线最花时间的地方:

    表字段的行号,代码,细胞,总时间(以秒为单位),情节的时间百分比和时间与相关数据条目示例代码。必须指出编码器的总时间。ceval是相对较高的。

  3. 行调用coder.ceval花大量的时间(16.914秒)。这条线已经相当大的执行时间,因为coder.ceval转换矩阵的表示一个B从行布局列为主的布局之前通过外部C函数。你可以避免这种转换通过使用一个额外的参数布局:rowMajorcoder.ceval:

    和= coder.ceval (“布局:rowMajor”,“foo”coder.ref (A), coder.ref (B),长度);
  4. 生成墨西哥人使用修改函数和概要文件MyFunction

    一个=兰德(20000);B =兰德(20000);codegenMyFunctionarg游戏{A、B}foo.cfoo。配置文件配置文件;MyFunction_mex (A, B);配置文件查看器;
    配置文件详细报告MyFunction显示调用coder.ceval现在只需要0.653秒:

    同一幅图像如前所述,编码器。ceval总时间减少0.653秒。

折叠表达式对墨西哥人代码覆盖率的影响

当你使用coder.const褶皱表达式为常数,它会导致不同的MATLAB函数之间的代码覆盖率和墨西哥人功能。例如,考虑函数:

函数y = MyFoldFunction% # codegen= 1;b = 2;c = a + b;y = 5 + coder.const (c);结束

分析MATLAB函数MyFoldFunction这个概要文件详细地显示了该代码覆盖率报告:

然而,分析墨西哥人的功能MyFoldFunction_mex展示了一个不同的代码覆盖率:

第2、3、4行不执行生成的代码,因为你有折叠的表达式c = a + b为代码生成一个常数。

这个示例使用用户定义的表达式折叠。代码生成器有时自动折叠某些表达式优化生成的代码的性能。这样的优化也导致墨西哥人的覆盖函数不同的MATLAB函数。

另请参阅

|||||

相关的话题