找回密码
 注册
Simdroid-非首页
查看: 107|回复: 2

改for- loop 循环变量为整型后,for-loop提速30%

[复制链接]
发表于 2012-5-15 00:53:58 | 显示全部楼层 |阅读模式 来自 台湾
本帖最后由 flyingogo 于 2012-5-15 10:38 编辑

环境:Intel cpu pentium 6700, win7, matlabR2010b.

原程序:
function k=pbug(N)
    p=0.3;
   
    i=1:N
        p=3.4*(p*(1-p));
    end

k=p;
end

命令
tic, pbug_d(1e9),toc
给出运行 9.3s.

命令
tic,pbug(int32(1e9)),toc %注意:输入是整型

给出同样结果(ans=0.451963247626153)
只用了 6.6s, 快了~30%

结果看起来还可以。 简单改变循环变量为整型让for-loop 快了30%
Linux(Ubuntu 12.04 LTS, MatlabR2010b) 中结果类似。
有个问题是编译成mex后就看不出差别了,甚至在linux中的整型还要慢一些。哪位高手知道为什么?
谢谢!


用秒表手动测得结果也差不多,排除了计时错误。
在另一台PC (i3-2100)上, 时间为7.1s 和 9.5s.
好像和cpu也有关系。

评分

1

查看全部评分

发表于 2012-5-19 22:56:14 | 显示全部楼层 来自 河北秦皇岛
Simdroid开发平台
环境:Intel  Core Duo E8400, win7, matlabR2011b.
tic, pbug_d(1e9),toc
Elapsed time is 7.016936 seconds.

tic,pbug(int32(1e9)),toc
Elapsed time is 6.859164 seconds.
没差那么多 确实快了点
回复 不支持

使用道具 举报

发表于 2012-5-20 01:14:52 | 显示全部楼层 来自 英国
或许是因为MATLAB的JIT里处理方式有所不同,在不关掉JIT的情况下用整型(除了JIT不支持的INT64和UINT64)的确是快不少。
但是如果关掉JIT(用feature accel off命令),那么循环变量选择对最终速度没啥影响,甚至直接用double还稍微快一点点。

JIT主要是用来优化M-File的,编译成MEX以后没什么区别也不意外。

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-2 02:44 , Processed in 0.029636 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表