请选择 进入手机版 | 继续访问电脑版

QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7516|回复: 4

极限测试之Matlab与Forcal动态内存管理效率

[复制链接]
字体大小: 正常 放大
forcal 实名认证       

45

主题

3

听众

282

积分

升级  91%

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

    [LV.1]初来乍到

    发表于 2011-8-2 09:51 |显示全部楼层
    |招呼Ta 关注Ta
    这里用一个不太常用的小例子说明一下。
    0 T  F2 K/ x3 W+ _6 Y: \% j3 b& P6 {) k" u+ C0 N3 t( K
    matlab 2009a代码:
    1. clear all\" Z% R3 }5 y- B' G, z
    2. tic
      : t0 I& e) B  Y/ @
    3. s=0;& W4 W+ R% n! q1 s1 m0 @
    4. for k=1:1000
      1 L9 w( D! p+ Q% \
    5.   for i=1:1000
      5 k2 B8 M- A, j+ J5 a# @
    6.     a=linspace(2,2,1000);' f+ }& n  K# M) _& k
    7.     s=s+a(i);
      % L! A0 K, M/ F) u( ]
    8.   end
      2 B% L; i( C0 }- `$ U5 x6 c% }: i% D
    9. end
      + s! [! z& l/ @) F\" P' U; s1 y
    10. s9 t' Z! r3 J. b\" m6 z' \6 C
    11. toc
      8 w6 `$ s6 g. ^

    12. * P* _6 Y5 \, a4 y
    13. s =$ c8 o, n0 f7 @

    14. ; M2 L: H! B) o! J6 d
    15.      2000000
      % U( N8 g9 k, y/ F5 Z. x3 Y; G! n
    16. 7 A- J/ K# d; M
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。# l2 g6 t8 L- n! a

    , |5 G- H0 u. H5 e5 c  S- h--------
    ( ?0 |! D% \3 ?- U! h$ ]$ R, E9 w
    ! V2 j4 s) m6 k1 t) sForcal代码:
    1. !using["math","sys"];3 j4 r( i0 x; L+ G4 _
    2. mvar:
    3. 8 i- _\\" P  c/ w, m. V# P6 O
    4. main(:a)=
    5.   {$ z$ R* b$ `' ~. I
    6. t0=clock(),2 M\\" z1 D- a/ l9 J
    7. s=0,) [- ~3 L6 o7 {# @2 b
    8. k=0, while{k<1000,
    9. 2 }( B9 G, j- d6 x1 z3 o, _
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    11. 5 i2 k1 ?' l' a4 G, k$ k8 z+ U
    12.   k++
    13. 1 E8 o\\" z. j5 G6 o5 @) u' ?
    14. },7 s! E1 X9 |7 u' _\\" u% G
    15. s;
    16. 9 r7 Y/ O+ {9 p4 i: I! R  W5 V% n8 _. H
    17. [clock()-t0]/1000;
    结果:
    8 [; e2 t- n9 E# J2000000.4 h7 H+ B2 H  c- V6 {
    40.766 秒7 i% Z* `7 H* k- g
    : [# b0 w) G" L, Y; ?
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    ; o* P& n9 ?9 n2 L因垃圾收集器多次启动,故耗时较长。
    0 A4 M7 U- |' ?. u' C% Y8 L# T2 a+ S" ^* K
    ------------. ?  ^' S) T: ?+ O# V1 ~+ I* p
    6 n$ e# G+ k/ [2 Q" B! z3 Q& H. K
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. . U4 D) A4 }% j$ T/ X! o
    3. mvar:
    4. + J& b! q4 |5 q
    5. main(:a)=
    6. & m$ H- b  h0 Z4 q1 _) P\\" ^
    7. t0=clock(),; `8 K9 I+ c) ~9 z3 J3 q\\" I
    8. s=0,
    9. 7 B- Y4 o# b/ p# C* T( v5 j
    10. k=0, while{k<1000,
    11. 2 `0 [% l8 s8 ?
    12.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    13. 0 X4 g! O. v0 T5 K
    14.   k++
    15. & m. a6 g5 [# Y\\" F, `: ~0 I
    16. },
    17. 1 y' z( H) l  K9 y1 _6 p# H
    18. s;
    19. : m3 \& \& \2 Z4 k: x
    20. [clock()-t0]/1000;
    结果:+ J3 s: l- R: _! y. {& T# e
    2000000.
    - z5 D+ [3 _4 t4.609 秒
    & T# a0 z/ q" S) |. @2 B& W
    5 I! H2 N( q# ~可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    - H' P+ r4 p- V) c8 m' }% `, N在Forcal中,函数oo{ }不仅提供了运算符重载功能,而且会自动高效地回收垃圾。通常,所有涉及到对象的代码都要放到函数oo{ }中。
    zan

    36

    主题

    3

    听众

    1731

    积分

    升级  73.1%

  • 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% D6 a! \7 w+ c! @/ ]
    太强大了 看不懂啊
    % _1 I* @/ @( Y6 A; Z& D
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forcal如何处理垃圾对象和进行内存管理。
    回复

    使用道具 举报

    36

    主题

    3

    听众

    1731

    积分

    升级  73.1%

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

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    forcal 发表于 2011-8-2 18:18
    2 V  W- i) ]+ l  q' I* m" t; |函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    7 Y' V' u" \! W6 w恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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, 2024-3-29 22:33 , Processed in 0.642669 second(s), 74 queries .

    回顶部