QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 9132|回复: 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
    这里用一个不太常用的小例子说明一下。5 J1 m! B6 ^2 p' `, M/ U5 C% x- \

    * g/ l4 X' g* \: o/ a( gmatlab 2009a代码:
    1. clear all
      0 V2 z2 I0 @0 }7 {- G
    2. tic) z- Z& |  c+ s
    3. s=0;  k5 B% e0 B! r
    4. for k=1:1000$ ^$ U! K% u- W) C8 @
    5.   for i=1:1000
      9 p0 y9 `& y2 L; l. {9 p
    6.     a=linspace(2,2,1000);
      7 T) d# K6 E& {1 j( g
    7.     s=s+a(i);
      : X4 H6 b- N8 m4 l! B; `4 _1 e8 Q5 V
    8.   end
      $ a# `3 O8 k8 Y$ M4 w3 r$ U
    9. end
      2 F; E9 i, Y: s; ?# I
    10. s/ k& z7 A2 ?\" w% w! ]\" f, B. u% V
    11. toc
      ' t2 R- A: N' z  B8 F
    12. ! \' p/ l8 L6 O# J
    13. s =4 r- e% D* P, h* ^9 v\" k

    14. - N5 [: b3 G% q+ U6 t- A# Q
    15.      2000000
      1 i& r& Q9 P+ A8 f) V8 }9 P9 W2 R$ X
    16.   @5 ^- m% e$ L3 i$ s( a# i, u( Q
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。" e0 m; u3 \. q) M
    3 r6 }2 r& t5 S% l
    --------
    ' C1 T/ i/ ^* n$ i- C
    . m8 _8 t3 ^- x- WForcal代码:
    1. !using["math","sys"];, j* ^# V/ S- t
    2. mvar:
    3. , X1 p( Q3 N3 Z8 i\\" g  |/ a
    4. main(:a)=
    5. 4 a8 z7 r0 ]* S1 G' Q
    6. t0=clock(),
    7. & B# \4 ^) T0 V; w$ `5 w5 ~8 s1 Y
    8. s=0,
    9. 9 Y0 _4 c- c5 a. \
    10. k=0, while{k<1000,3 b4 ?& k4 Y' J6 u2 w
    11.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)$ Z' p0 z1 q4 t% ]* X+ x8 l
    12.   k++1 ^' A. A- P4 E+ @. z2 N
    13. },* n% G3 Z# y3 D
    14. s;/ D; z! y$ \' S3 U( C  w
    15. [clock()-t0]/1000;
    结果:$ L" K2 V* F/ w  R. C
    2000000.# W8 i, P+ O& m7 Q
    40.766 秒
    " f  M) }+ q% Y" z# T0 s4 ?* e
    2 G+ L5 B) j" D: Q6 J9 |7 {( S% B3 V程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。% ?* s" z) r  Z" i0 w
    因垃圾收集器多次启动,故耗时较长。
    - r* n( N5 ~* x3 I" T2 o1 K& V" D" S& N. e& j& {, F# V; D8 D5 F
    ------------( C% F+ B+ z& T- l9 i( K

    ! K% M  A. F1 U以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. ! P* H: ]( l; M+ p
    3. mvar:9 S2 j* Q) Q$ |; v
    4. main(:a)=
    5. 4 u5 U/ U$ U8 G
    6. t0=clock(),+ W' B, @8 V1 G
    7. s=0,\\" ]1 I' P$ c6 Z# N
    8. k=0, while{k<1000,
    9.   u( m1 F; m# x$ ~0 r
    10.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    11. 7 u% X6 d/ y7 |9 X4 s4 r
    12.   k++
    13. , w4 ^1 h8 m& K- \! e- `; l
    14. },
    15. & G, v, E8 N3 _7 i
    16. s;3 e0 T7 W2 o/ _4 U8 U3 O
    17. [clock()-t0]/1000;
    结果:$ l" J3 x+ u4 E5 |+ o: _( o
    2000000.
    ' Y% X8 e; f5 u( v  |: l# K% U4.609 秒
    + y, P* `  O' J- s9 Q8 h. Y: L. d
    + z9 Y1 Q) x/ C( t/ ^可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
      Y5 U, f1 m+ `+ l& U在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 3 G" P: P  u+ e* O  V% \$ L, n9 v
    太强大了 看不懂啊

    " X2 X- I/ M# ^8 c7 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
    , _/ `' }  n% o8 |/ O0 e. s函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    9 T" X3 G/ L; n7 r1 |
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-9-2 02:11 , Processed in 4.544510 second(s), 74 queries .

    回顶部