QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8853|回复: 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
    这里用一个不太常用的小例子说明一下。
    # d5 f- ?* @3 K- n* x7 {0 p- P
    ! [! Y/ k7 B, ~7 n% H/ `matlab 2009a代码:
    1. clear all8 x5 P/ O( i, v/ N: @7 e4 ?. N5 o5 T
    2. tic  M5 D; i\" ]1 C$ e
    3. s=0;
      & R6 U3 h) u/ J
    4. for k=1:1000
      8 M& W0 F) O. G; l3 _
    5.   for i=1:10002 m6 }\" B  X# K# @1 x! R/ h6 L+ z
    6.     a=linspace(2,2,1000);; J. l$ @' x' T, o  X
    7.     s=s+a(i);, x; X  S& c, s. z# }1 B4 t5 Y
    8.   end/ ]0 p! ?. ?) @, {
    9. end
      . a0 l* Y1 {1 s% P' N( `+ H
    10. s
      / ?! k8 U& k+ \) x
    11. toc2 y  T* T1 H& q& h& O6 b
    12. 6 x. Y+ r, u  a
    13. s =
      , d3 v; W3 ?/ p9 x2 B/ m4 W

    14. ( y\" c\" w4 v! a, t
    15.      2000000
      0 Q# ^4 a, G+ ]; v' J: Y9 A

    16. 8 j. x- a! v# F/ x: {  X
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。4 _% U; u( f9 i0 B' ^: W- x

    # [& N' T( g! I* C; n# M- }2 t8 C' E8 r--------7 K# d* `  s; b# b; ~" h( S& U3 _
    9 |' C- `+ n: K* ?
    Forcal代码:
    1. !using["math","sys"];
    2. 6 P3 B. ~! c( ?- m# }6 A
    3. mvar:; I; X6 O6 Y+ n7 Q
    4. main(:a)=
    5. 0 I# n: n4 S) Y/ B0 E
    6. t0=clock(),! y  }/ ]- K% l4 f\\" V$ x. v1 p! I
    7. s=0,
    8. 4 U7 t: b! q4 M* Y7 f
    9. k=0, while{k<1000,
    10. ) V( F# q4 r6 Q4 M& a8 M
    11.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    12. 1 y& K  z# Z' R* f\\" E
    13.   k+++ A3 S. r0 k  b, d
    14. },- I: r$ J0 {# t+ R$ c$ e- C! e- o
    15. s;
    16. : m8 Y% }* Q. d/ z
    17. [clock()-t0]/1000;
    结果:; E  x9 I1 K  H; D/ I  z5 Y" B
    2000000.
    4 h2 h# Z  C3 o6 o# Z5 c  {! J9 P40.766 秒
    3 A0 F3 ^2 C- W, k; k3 J1 N
    ' m1 Y9 y% j% k; f程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    1 }/ q6 J3 o- {  b  R' t6 Y) \因垃圾收集器多次启动,故耗时较长。5 J2 x/ a# ?/ W7 k

    / a' n) n! {& T( z5 R------------# t' [$ n, P7 S6 j. Z

    " U! w4 f5 B% R, Q, z7 T以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. # I2 S, N1 F  M% }$ g# D
    3. mvar:! M9 r9 ~. k/ J; G1 |% u\\" ?4 `% t7 D
    4. main(:a)=
    5. 0 k. l- `8 h; ]; c6 I
    6. t0=clock(),
    7.   b+ {! e+ Y; y& X
    8. s=0,
    9.   I/ B8 a5 D& i) Y
    10. k=0, while{k<1000,
    11. 0 N3 N, r# c! f& ^* s
    12.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    13. % J9 z\\" e, h6 V
    14.   k++
    15. % s* G* C9 a9 l
    16. },
    17. ! v% }' v  Z9 Z( ]
    18. s;
    19. 9 q& p& C& w: s2 z( x
    20. [clock()-t0]/1000;
    结果:2 v9 w' O4 l7 E7 Z) b: T
    2000000.: t# C; n! y* {: X% g! D2 @
    4.609 秒
    + n, h1 S! V( u2 d1 z
    * _6 S, D8 T, G! J* q1 A3 {可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    + l7 K& O7 e, |7 T在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 % K2 p4 S" m9 N0 ~
    太强大了 看不懂啊

    . G' j! i+ d& U! R% \- _  [0 y+ D函数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 4 N9 V3 M3 c4 a* D3 ?
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    / C7 c; N4 N! {* {8 A- ?恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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 03:17 , Processed in 0.360129 second(s), 74 queries .

    回顶部