forcal 发表于 2011-7-30 12:07

极限测试之Matlab与Forcal编译计算含自变量的简单长表达式

Matlab 2009a编译了如下简单长函数,多次编译,耗时均大约为3分钟:

f=@(x)x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
... ...(省略)
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
1;

完整的程序见附件:

测试如下代码速度:tic;
s=0;
for i=0:1000
s=s+f(1);
end
s
toc

s =

    67100033

Elapsed time is 11.902260 seconds.======================

Forcal 9(OpenFC演示)编译了如下简单长函数,第一次编译,耗时约0.688秒,以后编译耗时约6.3e-002秒:

f(x)=
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
... ...(省略)
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
1;

完整的程序见附件:

测试如下代码速度:mvar:
t0=sys::clock(),
s=0, i=0, while{i<=1000, s=s+f(1), i++}, s;
/1000;结果:
67100033.
0.64  秒

==================

可以看出,Matlab运行大的程序,仅编译就会耗费不少时间。

==================

为什么Forcal第一次编译耗时较长(约0.688秒),而以后编译耗时较少(约6.3e-002秒)?

Forcal编译器在初次使用时,给编译模块分配的内存较少,此时若所编译的表达式较短,则编译所用内存足够用,在编译时就不用再分配内存;若遇到一个较长的表达式,编译模块就要重新分配内存,直到能编译该表达式为止,故耗费了一些时间;以后,若遇到的表达式都短于以前曾编译的长表达式,就不再重新分配内存,故不再降低编译速度。

目前,需重新初始化Forcal,才释放给编译模块分配的较大内存,但一般不需要这样做。

对于脚本,编译效率和运行效率同样重要。

jmedwardliu1205 发表于 2011-7-30 22:40

geilivable

alair005 发表于 2012-2-7 13:16

安平池伟 发表于 2012-4-16 13:00

没来得急看,应该不错,先帮你顶

发表于 1970-1-1 08:00

发表于 1970-1-1 08:00

yunbuhuiku 发表于 2012-5-18 07:53

如果跟导师讲不清楚,那么就把他搞胡涂吧!

来电来函..欢迎洽购...

wangchen881202 发表于 2012-5-22 02:12

“拆东墙补西墙”之升级版“拆别人墙补自己墙”

支持一下
页: [1]
查看完整版本: 极限测试之Matlab与Forcal编译计算含自变量的简单长表达式