QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8857|回复: 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
    这里用一个不太常用的小例子说明一下。' o# X8 W7 u2 ]9 E% m: j) I

    ! P  g& S3 T  i6 ~, p  M. W' umatlab 2009a代码:
    1. clear all
      7 b; \$ H( D; d& c. f1 t+ R- ?+ D
    2. tic
      5 _( p  q8 B- V5 @\" l
    3. s=0;& ]. s- Z) A3 \8 I/ D* q2 m
    4. for k=1:1000
      \" f7 V: M7 o& h: F
    5.   for i=1:1000! ~! H2 M: ]0 V, H' g9 r
    6.     a=linspace(2,2,1000);' Y\" d/ M. [; e2 L* s
    7.     s=s+a(i);* }- W/ |+ I. O9 q
    8.   end
      : B: J0 c1 S0 M: j# q0 s6 i3 g\" L
    9. end
      ( _: C+ K\" \) J. t1 _
    10. s
      , x8 F: t' Q! b7 n, R3 Q
    11. toc
      * [4 s, z0 k5 H\" N# j& g2 z

    12. . S% z' `0 j0 G
    13. s =
      $ X' ]  i2 ~# j2 T; r! o! ?\" M
    14.   a! c6 V5 F1 c! b4 R1 E$ ~5 D
    15.      2000000
      3 O& w% W4 d' N) `

    16. ; h\" ?, _\" ~& ]1 i
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。# _1 o& f& x6 v/ }  c
    " R3 G3 |9 t0 p3 ]3 C- R0 ~
    --------7 O7 w+ K  t/ S; h8 a

    ; i; p5 s( z4 ZForcal代码:
    1. !using["math","sys"];
    2. 1 I1 _+ v) O7 C+ t9 C) A
    3. mvar:
    4. 8 |/ M9 x: r! K3 s; ]6 a
    5. main(:a)=; z8 C- E3 k, t+ o! p\\" J
    6. t0=clock(),1 M8 K# b/ d. r% }' r& N
    7. s=0,* }+ ]% X* ?/ f/ |; ]2 E1 y( a) w
    8. k=0, while{k<1000,
    9. & j3 t( ^. i\\" ^: y
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    11. - v0 Z2 K0 f. y  n8 x( Z; j: P
    12.   k++; e0 ^* U* [4 o/ |3 L. b
    13. },+ b4 e! {$ Q  u3 M) W) U' ]/ C! E
    14. s;
    15. 0 B  X; g9 h0 W( U+ K: j
    16. [clock()-t0]/1000;
    结果:
    ! F/ |0 q. P0 I, u2000000.9 W3 d0 a8 s6 n- |/ i, h  |  o
    40.766 秒' ]/ x- F, T/ U4 t4 {

    5 j* |" `8 c1 x$ j程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    8 k% j3 `0 L9 G因垃圾收集器多次启动,故耗时较长。+ C) z) i& {8 n0 B' }

    6 V$ w! P4 |. w- K  Z* _; O------------
    " O$ k1 u& K: _- `2 E0 t  |* P7 v( |; e% D( t6 s4 O
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. \\" f8 I8 b4 F# n8 V: S6 H! ^- C
    3. mvar:& h* s) c' V' r  J7 f
    4. main(:a)=. f4 j0 Q$ ^) X9 H: V, D: M
    5. t0=clock(),
    6. + e. i6 O, v4 C3 H2 G7 _
    7. s=0,
    8. 8 n& ?5 I5 A. }\\" B5 e* o# S
    9. k=0, while{k<1000,. x  W) V& e0 Z1 p
    10.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    11. . y' L! G3 L5 e8 a3 a
    12.   k++
    13. . w: Y: \- L- }) P  X) l) \5 {
    14. },
    15. 4 x7 ^5 d2 {% v1 z
    16. s;
    17. . k! \- G- t; g5 t6 Y
    18. [clock()-t0]/1000;
    结果:9 h  ?) q1 L* w; S( }1 Y
    2000000.
    3 c  h- p  o. C( `0 d7 e4.609 秒
    0 S+ C7 J. f' l6 i$ G
    4 x; O0 y3 j& ?  E: H可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。9 K" R) T# j; C% i' ~
    在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 : M: b/ g6 L3 Z- F1 N2 m% b
    太强大了 看不懂啊
    / G# Q+ G/ j# ?# f% K2 X( |
    函数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
    ; |3 f% R! y+ C3 h* m$ Y函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    ) r" j8 `# V' `+ O3 G0 _, 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-19 19:52 , Processed in 0.471865 second(s), 74 queries .

    回顶部