QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8851|回复: 4
打印 上一主题 下一主题

极限测试之Matlab与Forcal动态内存管理效率

[复制链接]
字体大小: 正常 放大
forcal 实名认证       

45

主题

3

听众

282

积分

升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2011-8-2 09:51 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    这里用一个不太常用的小例子说明一下。
    ; u/ F3 y5 ?7 H+ s8 \7 P( r  S" n' }# G6 _: E  e) N5 b  c
    matlab 2009a代码:
    1. clear all
      5 v! J8 S+ c/ o, Q
    2. tic
      # u0 V/ J7 ~! A2 I
    3. s=0;- [! Y( M5 n/ _/ t/ L( `+ f
    4. for k=1:1000. K, m0 ]2 W$ X) {
    5.   for i=1:10006 k, r8 c( o7 Z- s4 F
    6.     a=linspace(2,2,1000);) U, |( l- B. v# C6 I* C- x
    7.     s=s+a(i);4 i3 A! r' r\" L0 x- n
    8.   end
      3 x4 ~/ _  ^+ V! I' t. }0 U
    9. end
      8 w, K0 j+ }. H4 j8 u7 x( P
    10. s3 t8 H; w/ a1 I  \7 ]: t\" F
    11. toc* `/ i& @( O: J4 k0 [# r' i' b

    12. & e8 g7 W6 T2 b# `/ r
    13. s =2 v2 s$ h/ V  r+ a! I
    14. 7 |+ x3 o! N' R+ y$ n5 X3 ^
    15.      2000000
      . E& o9 Y% I5 X- D/ B% F; F

    16. ! ?- `\" m9 I( n; v
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。! w& R% g! _$ g& D+ _. W
    * J7 e4 X: K5 v# {
    --------
    ( E& P3 p/ b$ v
    $ a) q7 N5 ?8 f- h" d, I* OForcal代码:
    1. !using["math","sys"];5 D, a% ], g$ {
    2. mvar:
    3. 6 s  b, v7 _( ]& h\\" F9 x9 x
    4. main(:a)=) C+ |% R; C1 K* g) i* W, C\\" J
    5. t0=clock(),5 T0 n& j, c6 c+ n\\" P\\" d
    6. s=0,
    7. ( m( x8 P2 `0 K5 K/ p
    8. k=0, while{k<1000,& ?! }+ a8 u\\" Q2 }2 G4 M
    9.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    10. ( C1 @, x8 v% O
    11.   k++& F& L5 I& k2 w3 s$ H
    12. },5 ]9 C3 q6 y& X) O) h
    13. s;
    14. ) r/ v  W\\" K* v: L5 j
    15. [clock()-t0]/1000;
    结果:7 B$ \- u+ U: A
    2000000.1 z3 V  M' D, `. e$ U! x
    40.766 秒
    9 T/ V3 X7 D5 F" m$ i! z/ g
    0 G& z. T* l2 X# X程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。# S* a8 L  I+ v5 B" q3 X2 z
    因垃圾收集器多次启动,故耗时较长。4 h  M9 K2 ~5 t+ t8 c

    3 `8 i* f1 @6 v3 H0 S. N4 H$ g& L------------
    / {+ _5 Q& f, }2 Z. e
    & P9 o4 w& M  X% N% e以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];( ^+ R% R2 `3 Y& J\\" M
    2. mvar:: H3 d\\" y2 u5 u7 E* p
    3. main(:a)=2 r1 A0 V+ P* {. v. P
    4. t0=clock(),
    5. ( }  e4 N. b8 k+ g4 N# A
    6. s=0,
    7. ! \% D  x( @, v# F, b, ~
    8. k=0, while{k<1000,9 Q6 h! m% d& D2 K: T
    9.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)2 O7 {& l  @- Y( U
    10.   k++( @& F% p8 c, j) h- E) Q
    11. },$ U9 a0 ~/ q/ Q' n' ~
    12. s;4 l# b& G; W1 A$ u0 e
    13. [clock()-t0]/1000;
    结果:
    % r) p$ \$ U; N: p$ v/ B2000000.
    ( w: k  K$ U# A5 ~& Z: Y4.609 秒
    ! n7 k5 A5 C* d  e& D; X, n9 M8 n
    3 r# I4 k! v& s8 n可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    . t. j3 x. v9 D+ q* n. h+ g在Forcal中,函数oo{ }不仅提供了运算符重载功能,而且会自动高效地回收垃圾。通常,所有涉及到对象的代码都要放到函数oo{ }中。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

  • TA的每日心情
    开心
    2015-7-2 19:17
  • 签到天数: 300 天

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    回复

    使用道具 举报

    forcal 实名认证       

    45

    主题

    3

    听众

    282

    积分

    升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    我就在你背后 发表于 2011-8-2 16:08
    9 w6 ~. E4 l; v  d$ A+ F太强大了 看不懂啊

    + z2 w6 b) `1 K$ G函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forcal如何处理垃圾对象和进行内存管理。
    回复

    使用道具 举报

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

  • TA的每日心情
    开心
    2015-7-2 19:17
  • 签到天数: 300 天

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    forcal 发表于 2011-8-2 18:18 % Y/ \1 E5 c1 F+ o
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

      h$ {1 T, e% s8 M9 I恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    sxjm567 实名认证       

    8

    主题

    7

    听众

    2174

    积分

    该用户从未签到

    新人进步奖

    群组数学建模

    群组我行我数

    群组数学趣味、游戏、IQ等

    群组09年国际数学建模群—鹰之队

    群组电子科大数学建模交流群

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-18 09:51 , Processed in 0.454430 second(s), 74 queries .

    回顶部