QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7560|回复: 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
    这里用一个不太常用的小例子说明一下。) z4 w& d1 c: |1 F+ p; B% Q

    & J' m; k/ `5 B& O3 Qmatlab 2009a代码:
    1. clear all
      8 e( _5 Q' }% c9 x, k. m
    2. tic
      3 @0 \) }5 x; @6 m1 @: |1 V
    3. s=0;
      ( `6 @5 _, P9 W% ?
    4. for k=1:1000* N( d, y+ F- c( h& y+ d
    5.   for i=1:1000
      ' M& j  ]3 K9 u5 w/ m
    6.     a=linspace(2,2,1000);
      7 u( @9 X' B\" L* K$ ~
    7.     s=s+a(i);+ P- T9 l9 h. ^
    8.   end% f3 B, q4 }; c0 p3 [
    9. end
      0 t* u& j# S+ i7 l' |2 j
    10. s
      % C, ^% G( X5 v6 E% g* Y
    11. toc
      # r* u. O9 M- y2 J2 J' j1 ~

    12. , n1 G1 I& L# y( m! J6 N# w: h
    13. s =+ b3 u9 j4 g5 ^

    14. 6 l# z7 d, u( D1 c
    15.      2000000
      ( U+ Z5 l8 B7 I6 O7 N2 S( c) M

    16. 8 `& d2 c- }; m, D0 d4 i0 |. e! S
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。. E& w5 u6 U# k8 p
    : i% l9 i- F' B( h' m1 F
    --------# p4 w6 W; v' J9 B9 Q& x" C! }

    + H; B8 F/ ?! J/ q; R4 v0 o& iForcal代码:
    1. !using["math","sys"];
    2. 6 |, O0 V2 @& l( Q
    3. mvar:
    4. 2 \9 K# T: C* \0 ]
    5. main(:a)=
    6. ! @  o: N$ v3 y# j$ {
    7. t0=clock(),% F( U0 E3 }- {  B
    8. s=0,
    9. $ v& ]3 }! l( e5 _/ |) M6 M+ `* y4 N
    10. k=0, while{k<1000,. n( d( \; P. y3 R; _
    11.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)* w5 H9 G* p3 v+ m) I( G# _. a
    12.   k++
    13. 0 w$ b7 F& N: |0 F3 _/ }+ v
    14. },: o) q/ ^- {* [- E& E; I  C
    15. s;$ z3 l+ R9 B: B
    16. [clock()-t0]/1000;
    结果:
    ! j+ ?* q- H1 Q2 g+ }6 R2000000.
    1 s$ h0 M) P% p8 y! s" q40.766 秒
    : {1 ^3 F" B; s) N% I' t& j+ v
    8 g4 ?: C, L+ Q/ f' T' g程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。2 E: ~; {. w5 x7 S  P$ k
    因垃圾收集器多次启动,故耗时较长。# U! e8 w" X1 w7 f& ^) \" v# W* q8 ~; \
    7 [/ X$ Q, x& U4 Y6 I
    ------------
    5 Q# U( }  B0 U* w+ w. X, J; d8 c$ u7 F( W; f
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. : Z) W\\" r0 t1 }. `# o6 r5 R
    3. mvar:# l; `. C7 F& g$ o\\" ^: ]  C9 Y. l
    4. main(:a)=( k* B% I. P( W0 z  X  u
    5. t0=clock(),
    6. 0 P6 ^9 l/ m/ \  ?; {. \7 V* L
    7. s=0,# P4 A1 y* d6 h
    8. k=0, while{k<1000,
    9. 0 m2 f) F% C) B: ~1 E: x0 [4 j4 y6 r
    10.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    11. ' t4 d: Z- K1 O# T4 o+ S\\" V: T
    12.   k++
    13. 6 ]\\" }\\" e+ _* m\\" U) W; P4 h8 \+ F
    14. },
    15. 9 ]- p# X/ W' ^! d+ h& n
    16. s;
    17. ( E: F5 w) c' _6 R  b# [0 ^
    18. [clock()-t0]/1000;
    结果:
    4 s1 f# y7 e4 t2000000.
    + u- n2 B* I5 F; |* ^* Z% j9 O  ]4 |4.609 秒$ E2 R# _, w. w, ]7 y7 l
    * j, ]! X% u$ ~; k. B
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。! W3 `+ }& v8 Q+ N. k
    在Forcal中,函数oo{ }不仅提供了运算符重载功能,而且会自动高效地回收垃圾。通常,所有涉及到对象的代码都要放到函数oo{ }中。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    36

    主题

    3

    听众

    1731

    积分

    升级  73.1%

  • 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
    ' m9 f+ m& F# V6 g$ [太强大了 看不懂啊

    ( B, ~  [7 Y: c: o' r函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forcal如何处理垃圾对象和进行内存管理。
    回复

    使用道具 举报

    36

    主题

    3

    听众

    1731

    积分

    升级  73.1%

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

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    forcal 发表于 2011-8-2 18:18 * S/ Y# B, q9 Z! o& h9 ~! X) a
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    0 ~9 G. p6 [! }2 p  d  x- d
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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, 2024-4-26 23:56 , Processed in 0.555832 second(s), 73 queries .

    回顶部