QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8323|回复: 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
    这里用一个不太常用的小例子说明一下。6 I" r' ^$ C7 I" ], k, P+ {

    , u: ^2 n/ t% n* H( B: q+ bmatlab 2009a代码:
    1. clear all0 @0 s: C& W' c; c7 G$ h% F
    2. tic
      8 }: @6 l. d) n/ k4 J8 O
    3. s=0;
      # t$ n, @! k) U  r' W: q% D0 E
    4. for k=1:1000
      6 X& l/ l9 E* ~! g+ E1 W$ C* v
    5.   for i=1:1000$ W7 }: E, A& L
    6.     a=linspace(2,2,1000);3 M\" q4 @' L4 i& A
    7.     s=s+a(i);
        R( n# m, n\" s\" r% B
    8.   end/ i5 k' J% M& O9 L5 v- h
    9. end* X$ O/ |' i# c/ a
    10. s
      - q  C4 C, |) p. J/ c4 _
    11. toc
      : [  f0 S2 f  K- y2 \5 ]7 a
    12. / G7 j: ?9 r\" @- a
    13. s =
      1 O1 X5 _/ e- M3 P+ W9 ]7 K
    14. * ^\" `/ ^: {% q
    15.      2000000
      . O9 m9 D/ ?9 ]

    16. $ l0 j/ {# o4 H  u; H
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。
    - b. _: v( ~, ^+ B& k
    + w% F' S2 d* z/ F3 M% J& R--------
    ' a' i& [+ q9 Z' F) q6 f3 k% O3 g; ^, H- g0 s
    Forcal代码:
    1. !using["math","sys"];
    2. ! n1 e- Q  \  x
    3. mvar:
    4. 5 Y; w- }1 {: l1 y\\" t. h8 v
    5. main(:a)=
    6. $ y9 ]# J- M, L' g7 E$ l& S
    7. t0=clock(),% {, g) q& B' J( s1 X1 v- }2 Y) B
    8. s=0,
    9. 3 U' d4 b+ `# c0 i
    10. k=0, while{k<1000,8 u3 j\\" T9 g% z
    11.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    12. . N9 r$ x' [2 _$ W$ ~9 n
    13.   k++! V( g) \5 i% a8 A/ O' _! g: L( O: G
    14. },
    15. ' f\\" d% X: S( j9 e0 B
    16. s;
    17.   N) t5 H4 q' J+ R% E) E\\" G; W
    18. [clock()-t0]/1000;
    结果:
    2 c; Q5 ^1 g. d8 r9 m2000000.) F3 l* d6 m  R3 n/ u7 |0 ]
    40.766 秒
    # `! D$ j# }  e" w
    # Q( k4 Q' i: |! z2 ~1 ~- u程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    # j' ~. T* z7 X2 P因垃圾收集器多次启动,故耗时较长。  f. `) `0 N& y6 v8 _5 e

    ( Q) @; U) V% J" X& p------------' ?) O& P  h) ^' {: L
    6 G# O! L0 I" ]+ ~7 J: R: D
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];& {. y- P3 Y5 @2 T
    2. mvar:4 j% G7 i. E5 n, V+ [
    3. main(:a)=. D. K8 ^- I3 b& Y' X% B+ Q; D
    4. t0=clock(),
    5.   j; s. c- H/ X) j, _) j
    6. s=0,
    7. / f0 r. X6 V% q: a
    8. k=0, while{k<1000,# N8 F8 [0 R. ?6 Q7 c
    9.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    10. ! {$ t- z, L7 j# g1 ~
    11.   k++
    12. ! @2 k/ |4 M7 n: U& T
    13. },
    14. ; T- d- u, u! `/ ~
    15. s;
    16. . I+ E6 ]- @8 G8 F1 h. G7 }
    17. [clock()-t0]/1000;
    结果:, S* R9 }& Y1 r# R! X
    2000000.% ]9 T+ ^0 O; T  k% u- L8 q& m
    4.609 秒
    ' n* ~, Z  @8 O  k. I4 P6 f8 s! Y' u4 `( P: ^7 F1 R
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    $ K8 m: |2 k! G在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
    # d0 B* ~3 N. N$ h; \9 F- w; h8 Q太强大了 看不懂啊

    + \0 ]  _, `6 h. i' r函数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 2 E! {2 J% W3 l1 H$ W& A4 |6 ?
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    7 l7 k9 r% ^0 z. Y5 U- y恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-5-10 08:09 , Processed in 0.566594 second(s), 73 queries .

    回顶部