剖析MEX函数使用MATLAB剖析器
MATLAB生成MEX函数剖析执行时间®comerTM使用MATLAB剖面程序配置生成代码显示调用数和对应MATLAB函数行花时剖析器识别生成最耗时代码的MATLAB代码线信息可帮助您识别并纠正开发周期初期性能问题更多信息见MATLAB剖面程序剖面图
并剖析码提高性能.
万博1manbetx图形界面剖面程序不支持MATLAB在线TM.
MEX配置生成
MATLAB剖面程序使用MEX生成函数或,如果测试文件调用MATLAB函数,可生成MEX函数并分步剖析可命令行或MATLAB编码器应用执行这些操作
使用剖面程序生成MEX函数
MEX配置对象属性
EnableMexProfiling
至真实性
.或可使用
代码元
并发剖面图
选项 。MATLAB编码器应用中等效设置启动执行剖析中生成式台阶上
生成MEX文件
MyFunctionmex
.运行 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级
后再优化
启动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函数生成代码
函数名下点击第一链接查看剖析细节报表生成代码
MyFunction实战
.可见时间最长线段 :线调用
代码器ceval
需要很多时间(16.914s)。线执行时间相当长,因为代码器ceval
转换矩阵表示A级
并B级
从行主布局到列主布局可使用附加参数避免转换-layout:rowMajor
内代码器ceval
:sumer.ceval'-layout:rowMajor',foo名词,coder.ref(A),coder.ref(B),length);
MEX函数和剖面图使用修改后重新生成
MyFunction实战
.A=Rand(20000)B=Rand(20000)代码元MyFunction实战-args{A,B}foo.cfoo.h剖面图剖面图上脱机MyFunction_mex(A,B)!剖面图查看器;
MyFunction实战
显示线调用代码器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函数
并见
剖面图
|代码元
|coder.MexCodeConfig
|代码员.rowMajor
|代码器ceval
|编码器. const