通过使用概要文件墨西哥人功能MATLAB分析器
您可以配置文件执行时间墨西哥人由MATLAB函数®通过使用MATLAB分析器编码器™。的概要文件生成的代码显示了调用的数量和每一行的时间相应的MATLAB函数。使用分析器来识别产生的行MATLAB代码生成的代码,需要很长时间。这些信息可以帮助您在开发周期的早期发现和纠正性能问题。MATLAB分析器的更多信息,请参阅配置文件
和概要文件代码来提高性能。
分析器的图形界面不支持万博1manbetxMATLAB在线™。
墨西哥人形象代
您可以使用MATLAB分析器与生成的墨西哥人的功能。或者,如果你有一个测试文件,调用MATLAB函数,您可以生成墨西哥人的功能和配置它在一个步骤。您可以在命令行上执行这些操作,或者在MATLAB编码器的应用。
与生成的墨西哥人使用分析器功能:
使墨西哥人分析通过设置对象属性的配置
EnableMexProfiling
来真正的
。或者,您可以使用
codegen
与配置文件
选择。相当于设置在MATLAB编码器的应用使执行分析在生成的一步。
生成墨西哥人文件
MyFunction_mex
。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
,然后进一步优化:
使墨西哥人分析并生成墨西哥人代码
MyFunction
。运行MyFunction_mex
两个大的随机矩阵一个
和B
。查看概要总结报告。一个=兰德(20000);B =兰德(20000);codegenMyFunctionarg游戏{A、B}foo.cfoo。配置文件配置文件在;MyFunction_mex (A, B);配置文件查看器;
一个单独的窗口显示概要总结报告。
概要总结报告显示的总时间和墨西哥人的自我时间文件和它的孩子,这是最初的MATLAB函数所生成的代码。
在函数名,单击第一个链接查看配置文件详细报告生成的代码
MyFunction
。你可以看到线最花时间的地方:行调用
coder.ceval
花大量的时间(16.914秒)。这条线已经相当大的执行时间,因为coder.ceval
转换矩阵的表示一个
和B
从行布局列为主的布局之前通过外部C函数。你可以避免这种转换通过使用一个额外的参数布局:rowMajor
在coder.ceval
:和= coder.ceval (“布局:rowMajor”,“foo”coder.ref (A), coder.ref (B),长度);
生成墨西哥人使用修改函数和概要文件
MyFunction
。一个=兰德(20000);B =兰德(20000);codegenMyFunctionarg游戏{A、B}foo.cfoo。配置文件配置文件在;MyFunction_mex (A, B);配置文件查看器;
MyFunction
显示调用coder.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函数。
另请参阅
配置文件
|codegen
|coder.MexCodeConfig
|coder.rowMajor
|coder.ceval
|coder.const