QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8945|回复: 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
    这里用一个不太常用的小例子说明一下。1 x' o$ }" t# j. i( p2 Z. i" Q0 L; ~
    0 E: i2 [3 N- g, v; I" P
    matlab 2009a代码:
    1. clear all- j0 p4 d/ k2 t8 D) k% N: N
    2. tic
      & i; h1 }) g, P# r
    3. s=0;
      9 L1 }6 k0 z! W- \4 `6 U
    4. for k=1:1000
      ) p( v$ M- \! s
    5.   for i=1:1000. D. B  q  b! G7 z/ a* j3 {; C
    6.     a=linspace(2,2,1000);
      - A& B0 H( l9 t1 q5 j& h
    7.     s=s+a(i);$ P' k9 N  M( o) V( w+ r4 m- ]6 Z
    8.   end1 Y/ H! ]9 z6 ], ?4 B
    9. end
      5 U! Q6 c* a7 O% q7 C  r
    10. s
      ) K* H% s2 S  }2 X+ K
    11. toc
      ; K\" z( D6 ?  u  m6 E\" @

    12. 0 @% @! t9 Q( j4 p5 v# _
    13. s =! u- ?) `\" t/ ]6 H3 h2 M5 ~
    14. 0 r! M$ y: M* A2 d$ N: B
    15.      2000000
      . k2 l7 c5 v! M. V; D+ K\" c6 D
    16. ( I* q% R1 J6 B3 v2 L' u4 F- b
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。
    0 b7 D, M: V8 v2 g- h, \( V  s/ f9 Z4 |
    --------6 q4 E: }4 C! t+ [5 s8 {9 Q

    ( f+ V* P! Q9 c/ H$ NForcal代码:
    1. !using["math","sys"];6 o- ?3 Y- }, ]$ ^
    2. mvar:& _6 i! {0 _: a/ b0 W
    3. main(:a)=: t0 l! ]4 i& z$ ?9 f  K1 X# l# A
    4. t0=clock(),/ u1 ^/ \\\" ?# D3 b& k* O1 Z/ E
    5. s=0,
    6. # Y  b3 p. p. j, [
    7. k=0, while{k<1000,) E' ~% h3 V6 A* \
    8.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    9. % M, ~7 _& @0 |- ^/ Z; v+ p\\" q
    10.   k++
    11. 0 Q6 Z4 x5 @* O9 N  K) S
    12. },. O9 k4 o\\" P. Y  d1 o5 p
    13. s;# P- b; H7 L\\" l4 Y, |: R
    14. [clock()-t0]/1000;
    结果:' F1 J4 ~1 g5 ~0 l3 ]* m
    2000000.1 t9 O: d" O6 ^; n" _
    40.766 秒; j' F# ]$ ~& ~/ e4 U8 L
    & R: u$ r1 p# y* Q9 _6 ^1 W" v
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    + X( A/ \- l+ c7 \( b/ `4 g因垃圾收集器多次启动,故耗时较长。
    3 M# n* E1 Y- o: S
    - I- ?8 r% x  T------------
    - K0 Q: X" F# E0 x* w, A# P; W4 S$ W% z, s4 H6 f$ L& j  \
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];6 W. Q( U: u/ b/ \
    2. mvar:' ?\\" p9 o  C9 ]# d* W8 _
    3. main(:a)=4 Q: s+ c1 f4 v) I7 Y
    4. t0=clock(),4 s9 u+ r; m6 L/ k1 Q$ ^
    5. s=0,
    6. ' R8 ?: q% n9 a8 p& g& C$ z! }
    7. k=0, while{k<1000,
    8. 2 l$ i8 a, V$ j# V( s9 x8 y
    9.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)$ m# N( [- E4 I
    10.   k++; g+ Q. g0 L\\" B7 e
    11. },4 p# o/ b4 b1 U. T4 r# Z% u
    12. s;
    13. $ L4 r: u: z) W7 e! o* n- k4 g
    14. [clock()-t0]/1000;
    结果:
    % {7 s- m7 w( K: j5 O% ]3 |" _2000000.
    1 @) ~9 i8 {  N! P5 }, S4.609 秒
    & q1 O7 y, h+ p* y1 j3 |7 U/ X
    * P' P. v& ~# D! ^3 Q可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    - p' k* M9 }. L+ y8 F4 g  ]在Forcal中,函数oo{ }不仅提供了运算符重载功能,而且会自动高效地回收垃圾。通常,所有涉及到对象的代码都要放到函数oo{ }中。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    sxjm567 实名认证       

    8

    主题

    7

    听众

    2174

    积分

    该用户从未签到

    新人进步奖

    群组数学建模

    群组我行我数

    群组数学趣味、游戏、IQ等

    群组09年国际数学建模群—鹰之队

    群组电子科大数学建模交流群

    回复

    使用道具 举报

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

  • TA的每日心情
    开心
    2015-7-2 19:17
  • 签到天数: 300 天

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    forcal 发表于 2011-8-2 18:18
    & A1 Y% B# k' _% g% z. {7 B函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    + i# O8 c% O* E! J& H1 u
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    forcal 实名认证       

    45

    主题

    3

    听众

    282

    积分

    升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    我就在你背后 发表于 2011-8-2 16:08
    7 m1 Q1 c5 T; l; H太强大了 看不懂啊

    * W) Y3 b9 c- |3 L3 n函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forcal如何处理垃圾对象和进行内存管理。
    回复

    使用道具 举报

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

  • TA的每日心情
    开心
    2015-7-2 19:17
  • 签到天数: 300 天

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-15 20:31 , Processed in 0.416367 second(s), 74 queries .

    回顶部