QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8669|回复: 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
    这里用一个不太常用的小例子说明一下。
    ! N5 V2 j3 i- t6 @. ^6 W$ Z7 C7 d: \7 C! c% C& g" I" m( y
    matlab 2009a代码:
    1. clear all; r% T3 k: d\" D0 S( h
    2. tic+ Z4 u9 Y! P$ Z  j4 z6 w
    3. s=0;
      \" w7 q- R7 Q% s1 }* ^
    4. for k=1:1000+ i  }! P\" p\" K% `- a0 }
    5.   for i=1:1000
      . p' |\" T( C+ H# V3 M- K) Y; o
    6.     a=linspace(2,2,1000);5 l3 B- U: m3 ?4 ?4 |, L' e5 C
    7.     s=s+a(i);
      3 \5 \$ k9 Q1 i* ]* m. T. p
    8.   end( {0 C/ N* W# U$ \( \
    9. end
      9 ~: y4 y& h0 L6 G
    10. s3 o5 I# I* t0 M2 s9 k) ]
    11. toc7 K$ p9 S4 D, l; U! l( _& d- R! x! V2 |
    12. 3 @* T  @' w\" v9 P1 O& y4 S
    13. s =
      # J, W+ W\" @) i\" f3 R$ v

    14. ' k' R3 e/ }% c+ `2 T
    15.      20000001 Y1 |3 m- W5 \5 l% N+ i
    16. : t! `& ^( T9 p' O2 ^/ p  h/ K6 u( G
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。6 N9 b: A9 ?- c, G' k
    * a! L; e' x' {# f: n  g
    --------
    ! U4 K3 B7 e1 [- I" B, i! m8 V" P) s' K% i: X+ X
    Forcal代码:
    1. !using["math","sys"];
    2. + I) W% L/ I* [1 Z+ L, y' }
    3. mvar:: b& z% O* o' N( R. A, [! F9 l
    4. main(:a)=0 E8 c1 h0 o' r6 o
    5. t0=clock(),
    6. 5 p& P( E* {( H( h1 i* ?
    7. s=0,
    8. - C; X% P* p: ?8 K- F: F
    9. k=0, while{k<1000,) D7 x  L+ i4 S
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)3 a: w1 q% J* @7 M
    11.   k++8 I, u  e; d1 s4 W
    12. },- H, u8 ~9 X\\" Y0 f  X2 p* B
    13. s;. e8 W  Q3 k4 t
    14. [clock()-t0]/1000;
    结果:
    7 g7 m$ s! Q' k6 K& p3 n0 c2000000.
    4 P( a% t% H; P8 W0 F6 E0 s* m40.766 秒
    9 T( Z. H5 L- Z# S. x
    & D( f# A" ]5 T  }1 A! z* D; p, h% g' N( a程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    5 U: r2 c) n5 m6 |6 ^, p; g因垃圾收集器多次启动,故耗时较长。5 a- o$ k; v) K3 d3 z$ D
    5 g# c+ \& [9 r3 \7 p+ v: ]8 _' @
    ------------
    : v1 S6 @! H* X7 s; R6 N! Y8 y3 f0 }5 C. }- Y8 Z
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. # N/ J2 k6 E1 K1 k
    3. mvar:4 o+ }0 e: q5 t  `/ y' Z
    4. main(:a)=! R2 Q5 {  q5 f% g7 Z; `! I; B
    5. t0=clock(),, _8 c7 K3 ?- f( J
    6. s=0,\\" t% @; Y1 B# K/ j6 d' R+ z) y
    7. k=0, while{k<1000,
    8. 2 r4 ]; ]3 {0 |0 p9 Q( @; s+ K
    9.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i). W8 w# y+ N# Q% h# A' X7 f
    10.   k++! h5 P' n$ K# H3 I; N3 G* X
    11. },
    12. 0 l! z6 n. P& |8 w: z\\" h
    13. s;
    14. : Y2 V1 V9 L0 d2 l  D4 j
    15. [clock()-t0]/1000;
    结果:
    % i+ D4 ~9 a& a6 @2000000.. J# H& ~( K5 R. T
    4.609 秒. _0 y- c8 C. w. H2 y& f

    1 p* A% a! |  h* f/ Y6 [. c9 X可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    3 @$ k+ z3 ?) M  S# H8 j& d, k" F: D在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 $ S" c& a; {. t( F
    太强大了 看不懂啊

    ' K# J: |! H/ D2 y函数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
    / U+ Q5 N/ m3 B% Z+ \$ O7 S函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    % X- g* y. ]: ]& @6 x  @# E. H( i
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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 20:06 , Processed in 0.499211 second(s), 74 queries .

    回顶部