QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8863|回复: 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
    这里用一个不太常用的小例子说明一下。- g, c# H/ l$ }/ ]

    + @) |; o9 o! P4 I+ I# Zmatlab 2009a代码:
    1. clear all% d; x5 N1 e! a8 h' @
    2. tic\" I- T; d. d7 j
    3. s=0;& Z3 m3 H& _9 u
    4. for k=1:10004 w6 v& i3 [3 x. h# [: \7 v; E3 |
    5.   for i=1:1000
      ( ~+ H/ y) E2 m2 ^\" }$ x# h
    6.     a=linspace(2,2,1000);5 b- o4 H0 z* q$ ~2 Y% D. r2 h8 D
    7.     s=s+a(i);) C) e2 u\" k, v' n
    8.   end% ^5 i) m% ~) c
    9. end2 Y1 p: Z: C8 q% Q
    10. s
      + c/ s/ I  k6 V$ h2 D
    11. toc6 j: k( g+ C! M( S1 l6 ]

    12. # b! b- e. F5 u9 R4 A3 W
    13. s =\" y; O6 U! R0 J! T5 |$ E+ \# s
    14. $ c\" d5 Z! c\" A, e$ {  r
    15.      2000000; F' r0 S5 l& b7 N8 u/ a2 y/ [

    16. % @5 z! \. a; Y$ M' p\" t
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。9 P1 _. X1 C# J; a, Z
    , b2 A" H7 j* P' y+ I0 E$ N
    --------
    ' _$ h- r5 \" V. D8 X- r/ _' e/ ^% \
    Forcal代码:
    1. !using["math","sys"];
    2. 1 X2 ]; K: E% v' p
    3. mvar:
    4. ; C% {4 e0 P2 u. Y# I+ p& W( X: f
    5. main(:a)=, X1 s! @0 b9 }* W8 T
    6. t0=clock(),$ V9 @2 ?, g* K7 X5 }& p6 J\\" a/ |
    7. s=0,9 h' Q3 D\\" ?+ `3 f
    8. k=0, while{k<1000,
    9. $ o# D7 \  S5 _8 C/ l3 n
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)& L: l+ D9 j1 `6 D7 V\\" h, x
    11.   k++
    12. ; i* L7 t4 S7 n& e# M! ~
    13. },6 Z* u- E# i0 I2 S. l5 M+ R
    14. s;
    15. / r3 e1 y! ~: R7 e
    16. [clock()-t0]/1000;
    结果:
    3 T! r( p* m) |# p6 ?& D2000000.
    ; L4 x: U7 h! U40.766 秒2 ?4 C9 l& O: c7 Y
    " t( _( ^! L0 n( N8 |0 j
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。( i: r+ V+ y8 D% k( H
    因垃圾收集器多次启动,故耗时较长。
    0 r- v% G6 |3 u+ ]/ s4 }1 ?# g* ]2 z: l1 J2 B
    ------------/ p/ Y. o# b) Q  ~% I

    5 ^; d8 R3 ]+ l- g! T* L以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. ! \+ ~! p( C4 J; A4 f
    3. mvar:, i8 R\\" T* r/ n5 G, [
    4. main(:a)=! u1 }\\" i* x* g
    5. t0=clock(),
    6. ; U' I& A0 _% `2 Z$ G) h
    7. s=0,
    8. % M: {6 n4 o) e: C, E% a
    9. k=0, while{k<1000,
    10. 9 h( b\\" J\\" e# @# P
    11.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    12. ! u& C3 Q% I, F+ W2 ^
    13.   k++
    14. ' @4 _* m. q5 v# h
    15. },8 z; J/ j2 j% |+ H& @
    16. s;) N3 m% {+ W4 e3 ]5 T
    17. [clock()-t0]/1000;
    结果:
    ; |: L' U6 ~% q0 S2000000." k; P% K# R7 k2 Z3 H) \  h/ h
    4.609 秒! t- E2 ^$ Z& H: ?/ |1 b, B1 @+ D

    9 m5 ~2 W+ Q1 b$ [* G  V可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。1 K& Z9 H9 k, o; Q) V/ 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
      E( l# y0 o  u/ x1 j9 I9 B太强大了 看不懂啊

    . q2 r: [0 ?6 q, q函数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: \% \& `6 H: B1 ?8 R; P
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    3 H5 F8 q( y! y+ V
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-20 15:31 , Processed in 0.486973 second(s), 73 queries .

    回顶部