主体内容

剖析MEX函数使用MATLAB剖析器

MATLAB生成MEX函数剖析执行时间®comerTM使用MATLAB剖面程序配置生成代码显示调用数和对应MATLAB函数行花时剖析器识别生成最耗时代码的MATLAB代码线信息可帮助您识别并纠正开发周期初期性能问题更多信息见MATLAB剖面程序剖面图剖析码提高性能.

万博1manbetx图形界面剖面程序不支持MATLAB在线TM.

MEX配置生成

MATLAB剖面程序使用MEX生成函数或,如果测试文件调用MATLAB函数,可生成MEX函数并分步剖析可命令行或MATLAB编码器应用执行这些操作

使用剖面程序生成MEX函数

  1. MEX配置对象属性EnableMexProfiling真实性.

    或可使用代码元并发剖面图选项 。

    MATLAB编码器应用中等效设置启动执行剖析生成式台阶上

  2. 生成MEX文件MyFunctionmex.

  3. 运行 MATLAB剖面图并查看剖面摘要报表,它单开窗口

    剖面图脱机MyFunctionmax剖面图查看器;

    确定您没有修改或移动原创MATLAB文件MyFunction.m.否则剖析器不考虑MyFunctionmex取剖析

有测试文件MyFunctionTest.m调用MATLAB函数

  • MEX函数生成并分步配置代码元并发测试剖面图选项 。之前打开MATLAB剖面程序时,先关机后再使用这两个选项

    代码元MyFunction实战测试MyFunction测试剖面图
  • MEX函数剖析选择启动执行剖析验证阶梯应用前面打开MATLAB剖面程序时,先关上它再执行此动作

实例

剖析器识别函数或行MATLAB代码生成最需要时间的生成代码下例MATLAB函数转换表示输入矩阵A级B级从行主排到列主排变换大矩阵执行时间长通过修改该行避免转换提高函数效率

考虑MATLAB函数

函数显示myFunction(AB)代码元生成代码使用行主矩阵A和B表示代码浏览器长度=大小(A,1);遍历A和B所有元素的绝对值矩阵逐行%sum_abs=0For行=1:长度ForCol=1:长sum_abs=sum_abs+abss结束结束调用外部C函数foo.c返回所有元素之和百分比A和Bsum=0sumer.cevalfoo名词,coder.ref(A),coder.ref(B),length);返回差数总和y = sum_abs-sum结束

生成代码函数使用行主体表示方格矩阵A级B级.代码优先计算sum_abs绝对值之和A级B级遍历矩阵行逐行算法优化矩阵表示行主布局代码使用代码器ceval调用外部C函数foo.c:

#包含
               
                #包含
                
                 内含二维fo双和=0s=(int)长度/*归纳A和B*/s
                 
                
               

对应C头文件foo.h表示 :

# 包括ntwtypes.h二维fo

foo.c返回变量总和之和所有元素A级B级.性能函数foo.c独立于矩阵是否A级B级表示行主或列主布局MyFunction实战返回差sum_abs总和.

可测量性能MyFunction实战大输入矩阵A级B级后再优化

  1. 启动MEX剖析并生成MEX代码MyFunction实战.运行MyFunctionmex大型随机矩阵A级B级.View剖面摘要报告

    A=Rand(20000)B=Rand(20000)代码元MyFunction实战-args{A,B}foo.cfoo.h剖面图剖面图脱机MyFunction_mex(A,B)!剖面图查看器;

    单窗口打开显示剖析摘要报表

    剖析摘要展示表字段名调用,全时秒数,自时秒数和总时图阻燃图显示条形图表

    剖析摘要报告显示MEX文件及其子文件总时间和自时,即原MATLAB函数生成代码

  2. 函数名下点击第一链接查看剖析细节报表生成代码MyFunction实战.可见时间最长线段 :

    表格字段行数、代码、单元格、全时秒数、时段百分比和示例码相关数据项关键指出总时间编码器.ceval相对高

  3. 线调用代码器ceval需要很多时间(16.914s)。线执行时间相当长,因为代码器ceval转换矩阵表示A级B级从行主布局到列主布局可使用附加参数避免转换-layout:rowMajor代码器ceval:

    sumer.ceval'-layout:rowMajor',foo名词,coder.ref(A),coder.ref(B),length);
  4. MEX函数和剖面图使用修改后重新生成MyFunction实战.

    A=Rand(20000)B=Rand(20000)代码元MyFunction实战-args{A,B}foo.cfoo.h剖面图剖面图脱机MyFunction_mex(A,B)!剖面图查看器;
    剖析细节报表MyFunction实战显示线调用代码器ceval0.653s

    图片与前文相同 代码器ceval总时间减0.653s

折叠表达式对MEX代码覆盖效果

使用时编码器. const折叠表达式常量分解MATLAB函数和MEX函数代码覆盖差例例考虑函数 :

函数显示Y= MyFoldFunction代码元a=1+2C+by=5+codler.cst结束

剖析MATLAB函数myFoldFunction剖析细节报表显示此代码覆盖

剖析MEX函数MyFoldFunction_mex显示不同的代码覆盖

第二行三行四行不执行生成代码C=a+b进常量代码生成

例子使用自定义表达式折叠代码生成器有时自动折叠某些表达式优化生成代码性能优化还导致MEX函数覆盖不同于MATLAB函数

并见

|||||

相关题目