Matlab 编译文件地性能优化

来源:互联网
更新时间:2017/1/24 15:11:00
责任编辑:李志喜
字体:

12.5 编译文件的性能优化

12.5.1 优化原M文件的性能

12.5.1.1 提高向量化程度

【例 12.5.1 .1-1 】本例演示: M 文件与 MEX 文件、向量运算与循环运算的速度比较。

(1)编写如下两类函数 M 文件。

function y=sa(x)

x=x+(x==0)*eps;

y=sin(x)./x;

function y=saf(x)

n=length(x);

for k=1:n

x(k)=x(k)+(x(k)==0)*eps;

y(k)=sin(x(k))/x(k);

end

(2)在 MATLAB 指令窗中,对 sa_mex.m 和 saf_mex.m 进行编译。

cd d:\mywork

mcc -x sa_mex %<1>

mcc -x saf_mex %<2>

(3)运行四个文件,记录运算时间

t=-2*pi:pi/500:2*pi;

tic;sa(t);tt(1)=toc;

tic;saf(t);tt(2)=toc;

tic;sa_mex(t);tt(3)=toc;

tic;y=saf_mex(t);tt(4)=toc;

(4)结果显示和比较

plot(t,y,'r-');grid 点击图片看大图中国学网 www.xue163.com

图 12.5.1 .1-1 disp(' 运算速度比较 ')

disp(' sa.m saf.m sa_mex.dll saf_mex.dll')

disp(tt)

运算速度比较

sa.m saf.m sa_mex.dll saf_mex.dll

0.3300 2.9100 0.3800 2.5800

12.5.1.2 对数组进行预置

【例 12.5.1 .2-1 】以上节例 12.5.1.1-1 为基础。 saf.m 文件中数组变量 x 和 y 的大小随循环进行而增长,这大大减慢了运算速度。本例演示:在循环前对进行变量预置的好处。

(1)编写如下文件,以 saf_pro.m 和 saf_pro_mex.m 为名,将之保存在当前目录下。

function y=saf(x)

n=length(x);

x=zeros(1,n);y=zeros(1,n);

for k=1:n

x(k)=x(k)+(x(k)==0)*eps;

y(k)=sin(x(k))/x(k);

end

(2)产生编译文件

mcc -x saf_mex

mcc -x saf_pro_mex

(3)运行

t=-2*pi:pi/500:2*pi;

tic;saf(t);tt(1)=toc;

tic;saf_pro(t);tt(2)=toc;

tic;saf_mex(t);tt(3)=toc;

tic;y=saf_pro_mex(t);tt(4)=toc;

(4)速度比较

disp(' 运算速度比较 ')

disp(' saf.m saf_pro.m saf_mex.dll saf_pro_mex.dll')

disp(tt)

运算速度比较

saf.m saf_pro.m saf_mex.dll saf_pro_mex.dll

2.8600 0.6600 2.6300 0.4400

12.5.2 利用mcc(-V1.2)的优化性能

12.5.2.1 编译时指定优化选项-r和-i

【例 12.5.2 .1-1 】求如下非线性差分方程组在 10000 个点上的值。观察原 M 文件、无选项和有选项 MEX 文件运行速度的不同。 点击图片看大图

(1)利用 MATLAB 编辑窗口编写如下 M 函数文件

function [x,y]=m_henon(n)

x=zeros(1,n);y=zeros(1,n);

for k=1:n-1

x(k+1)=1+y(k)-1.4*x(k)^2;

y(k+1)=0.3*x(k);

end

(2)对 M 文件分别选用编译器 2.0 和 1.2 进行编译如下。

cd d:\mywork

m[1] [2]    $网神分页符$ cc -x mex20_henon % 用 2.0 编译器产生普通 MEX 文件 <1>

mcc -V1.2 -ri ri_mex12_henon % 用 1.2 编辑器产生优化的 MEX 文件 <2>

(3)计算各文件运行时间费用的相对值。

n=10000;

t=zeros(3,2);

for k=1:2 % 运行两次,以做比较

tic;m_henon(n);t(1,k)=toc;

tic;mex20_henon(n);t(2,k)=toc;

tic;ri_mex12_henon(n);t(3,k)=toc;

end

t=t/t(1,1);

(4)显示比较结果

filename=[ ' m_henon';

' mex20_henon';

'ri_mex12_henon';];

disp([' 各文件运行开销的相对值比较表 '])

disp(blanks(1)') % 产生一个空行

disp([' 文件名 第一次运行 第二次运行 '])

disp([filename blanks(3)' blanks(3)' num2str(t)])

%blanks 产生两个空列

各文件运行开销的相对值比较表

文件名 第一次运行 第二次运行

m_henon 1 0.78086

mex20_henon 0.69753 0.59259

ri_mex12_henon 0.015432 0

12.5.2.3 利用编译注记优化性能

【例 12.5.2 .3-1 】编译注记 %#ivdep 的应用举例。 (1)编写如下两个函数 M 文件,并存放在 d:\mywork 目录上。

[ivdep0.m]

function A=ivdep0( )

A=1:10;

A(5:9)=A(3:7);

[ivdep.m]

function A=ivdep( )

A=1:10;

%#ivdep

A(5:9)=A(3:7);

(2)分别对这两个文件进行编译 。

cd d:\mywork

mcc -V1.2 ivdep0

mcc -V1.2 ivdep

(3)在 MATLAB 指令窗中运行以下指令。

tic;A0=ivdep0;t0=toc;

tic;A=ivdep;t=toc/t0;

(4)显示结果 。

A0,A

disp([' 使用编译注记 %#ivdep 后的运用时间仅为原来的 ' num2str(t)])

A0 =

1 2 3 4 3 4 5 6 7 10

A =

1 2 3 4 3 4 3 4 3 10

使用编译注记 %#ivdep 后的运用时间仅为原来的 0.15152     [1] [2] 

www.xue163.com true /2/25464.html report 6969 Matlab编译文件地性能优化,12.5编译文件的性能优化12.5.1优化原M文件的性能12.5.1.1提高向量化程度【例12.5.1.1-1】本例演示:M文件与MEX文件、向量运算与循环运算的速度比较。(1)编写如下两类函数M文件。functiony=sa(x)x=x+(x==0...
最近关注
首页推荐
热门图片
相关文章:
最新添加资讯
24小时热门资讯
精彩资讯
精彩推荐
热点推荐
真视界
精彩图片
社区精粹
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2016 Xue163.com All Rights Reserved. 中国学网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
荐闻 | 学网头条知识问答 | 装修 | 作业 | 荐闻 | 学网头条精彩微信 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 精彩微信 | 猎奇 | 精彩看点 | 图库编程 方案 信息windows方案windows answer文档机构教育文档问答中心IT编程数码信息解决方案信息中心IT科技