QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8942|回复: 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
    这里用一个不太常用的小例子说明一下。
    8 G+ ^, Q& G3 \0 H( v  d8 F! h9 f
    matlab 2009a代码:
    1. clear all
      - {. |' {& p; a/ j
    2. tic
      2 _8 P' H7 q. _* z6 t9 `- G% _3 K
    3. s=0;
      & {. J( v! M* S* A* ^
    4. for k=1:1000  K' N9 W# U( L5 S2 ], n* n0 R+ N: P
    5.   for i=1:1000# h) R6 F2 X' _- ~7 `( s! l5 p
    6.     a=linspace(2,2,1000);
      3 o9 e) M2 |1 X( Q- W4 L
    7.     s=s+a(i);/ H$ I: `$ P/ \$ [1 Q
    8.   end# \0 e( `# r4 \; H
    9. end: i  |4 K# ^& |! ?. ?' o
    10. s5 Q2 j; S1 P3 G; E! n
    11. toc. m# c! u6 ~& ]( |- f* g: p
    12. # |, |' c3 |8 x, y, |' ]
    13. s =+ R2 v* b$ }! X! }' ]( I\" _
    14. % A\" q3 y5 W2 Q* b9 S8 r3 }7 `4 C
    15.      2000000
      + M, h* ?$ P8 m! N! A% W

    16. % f8 g) ?$ [) h4 p2 J* R
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。, a7 Q/ D) ^4 O- {( S0 U" ~  m+ |' y& ?

    1 V" M# ?6 T" v0 y  m$ k2 S% r--------
    ! M' m9 S3 w% s- `! V7 ~8 Z3 `
    9 @; s2 i: h; C4 p' HForcal代码:
    1. !using["math","sys"];5 V+ T1 a9 ?% o4 y( Y
    2. mvar:% Q0 h( R% E( O8 _
    3. main(:a)=
    4. 1 ]# ?7 B) T$ `4 D0 h% v1 q  v
    5. t0=clock(),. I  Y4 |7 b) l
    6. s=0,4 J0 o/ Z6 e8 C8 r% {5 m) ~. x
    7. k=0, while{k<1000,! }. o2 [( Q\\" i0 n1 h
    8.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    9. 7 j\\" t3 D. S. T: b\\" R1 I3 b
    10.   k++
    11. ; [, A: h: Z6 M* o  O* w) _& j
    12. },
    13. 2 j  j  i8 C( |4 e$ }* ?
    14. s;
    15. % j& H+ y2 l1 N1 O: e
    16. [clock()-t0]/1000;
    结果:
    - ?5 y" g% I' S/ b2000000.
    4 m: ]- ]( ~2 P+ e40.766 秒  j1 P* z) W- }; G, r; p4 h" c

    % W2 a3 u- O) N  |8 T程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。+ p+ a# W: i& @( }9 V" E
    因垃圾收集器多次启动,故耗时较长。
    . y; s3 [$ d( y9 N% q& ]& x: G+ M0 q* g4 L
    ------------
    1 u3 t5 \! K- I( ^
    " g) V# o# D+ D5 h5 f以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. 4 P\\" |6 T, y, n$ m  l2 s9 @; ]
    3. mvar:
    4.   N' ^, {5 \* o: v; _
    5. main(:a)=# m) b( Z& D, ]! P7 g( |
    6. t0=clock(),
    7. . M0 @' G* K\\" Z3 a
    8. s=0,0 b\\" @& ]' T+ i: i: t
    9. k=0, while{k<1000,
    10. 2 K/ n& y: x7 s- H5 s# c\\" j, C9 D3 L
    11.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)$ f( z6 c, w4 E- e* G
    12.   k++2 L2 n1 n0 n9 x\\" |
    13. },
    14. & r) ~. m% P$ u6 K
    15. s;$ u8 o. J- [3 M: [* i; f7 v
    16. [clock()-t0]/1000;
    结果:
    2 h5 E3 c5 c. L3 L0 v  `2000000.  D2 i; w1 v8 h! r% U+ ~
    4.609 秒
    . c& r6 X" u3 _* `. N6 p/ r$ D- }8 J
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    4 w/ y. l- \. A0 H0 C! I" m& z在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
    ) n% J) F7 N4 ~6 n% q0 v" M2 X  l太强大了 看不懂啊

    3 @1 T. N1 c& S$ E6 A0 G8 l$ q函数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
    8 u" v7 C7 i3 K9 `+ I. X6 y( F函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    - G- b9 G% u! |  ]; S$ E( ~2 E
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-6-14 18:54 , Processed in 0.450118 second(s), 74 queries .

    回顶部