QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8672|回复: 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
    这里用一个不太常用的小例子说明一下。
    ) z. K2 w  f; g+ i, O$ V( X
    1 }8 @  |, D  ?) x6 M' _matlab 2009a代码:
    1. clear all
      % Z' Z% @; i6 G6 n
    2. tic! Z. ^4 F9 q2 w4 T+ c
    3. s=0;
      + V# s  _1 V0 q4 F, F
    4. for k=1:1000
      ! ^# A% o7 M! _\" ^6 G
    5.   for i=1:1000
      / I4 j, k6 K* e9 X
    6.     a=linspace(2,2,1000);
      ! g7 F  I% R9 ?& y  r& C! t
    7.     s=s+a(i);) |\" R- Z5 _) U. u: ~. @
    8.   end
      ( k\" Q  L- D( G1 N3 f3 R* p
    9. end- @' o5 e! k4 c) x
    10. s
      + a1 S2 o8 u4 h0 _
    11. toc
      2 E! U' b1 b7 A+ \) J/ K9 N

    12. % i2 ~7 u; b: a/ X; L) ~
    13. s =
      \" ?% ^6 K) e! K

    14. # m\" {3 R) t( ]
    15.      20000005 d5 o: H* }# S: s
    16. 1 Q1 K; D\" X, |
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。+ z0 m" M9 u' A- h1 |; t3 {8 Q
    5 c2 F  F/ D1 }. L9 R/ Z3 V
    --------+ N1 Y( K5 N) ?8 F
    + L5 q. t4 Z4 u' v8 V- {
    Forcal代码:
    1. !using["math","sys"];+ O; L) y5 H* ~  q
    2. mvar:
    3. - A  l6 H2 z+ Y( r' Y1 w6 B% e
    4. main(:a)=
    5. % ~% Z+ p1 l7 h' I, X4 D1 P2 O
    6. t0=clock(),
    7. : N2 e7 ]. i$ _  Q8 T# N4 e4 \
    8. s=0,
    9. % P9 x( x. Z, Y* V4 x( k
    10. k=0, while{k<1000,
    11. / S& i. b3 i) D1 d2 F
    12.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    13. : @% {( N+ k# N
    14.   k++
    15. % J! ~3 E! j- S% T
    16. },/ z9 B( Y- B2 k1 m( ~$ h0 I
    17. s;  ]. Y\\" R3 c+ O0 d; \4 A0 s% d& V
    18. [clock()-t0]/1000;
    结果:" c$ p' g* s9 h( d
    2000000.3 `1 d, N2 V  N0 h/ W
    40.766 秒# ?6 X+ d& j5 D; y5 q

    + [& P- {* _5 y' h程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。3 p5 _( u8 N5 D: {. V- W" k
    因垃圾收集器多次启动,故耗时较长。
    ( |% o: J; w% K4 J, a: G
    9 b1 ^4 U( v% U. |2 h. [------------
    # i- d$ x8 }( I% h# e1 |9 @! `
    1 j, t- C# @' \9 @, _. E% [7 A以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];+ P6 H( z% K; h# F3 K, \# k
    2. mvar:$ n/ ~8 B- m8 g, h0 W
    3. main(:a)=
    4. 8 [- }. W9 S0 f! b4 N
    5. t0=clock(),
    6. 3 Z1 V6 X; m+ R6 b9 L4 `\\" G
    7. s=0,: @: j* J* r) i% f5 f
    8. k=0, while{k<1000,
    9. 6 U3 V7 p\\" i& w\\" w& K9 S5 M% O
    10.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    11. 6 \( ?% I- n2 j2 e: f: j. l7 O/ M, x
    12.   k++
    13. ! e+ O1 a/ c) O, n# V% L, c
    14. },) p1 B8 O# D; v
    15. s;
    16. # N* u. X) a- f+ M\\" E; G9 W
    17. [clock()-t0]/1000;
    结果:$ n6 R9 C+ s2 B: D0 S1 ]
    2000000.
    ! }8 |0 ]6 ^3 i4.609 秒$ h: O  V  z% @7 r

      f# ]5 h0 `0 O5 N+ w  o# I可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。, O1 l; a  M# l3 h9 ^
    在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 # ^4 C3 `% T  |2 |
    太强大了 看不懂啊
    * y3 c( a+ `+ p5 u
    函数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
    7 N7 n/ G$ k! P, m函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    , K, ^! P* k* S, p( x9 h
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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, 2025-11-15 22:14 , Processed in 0.755910 second(s), 74 queries .

    回顶部