Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2003
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Compile + Module => Memory Leak

  • To: mathgroup at smc.vnet.net
  • Subject: [mg39983] Re: Compile + Module => Memory Leak
  • From: atelesforos at hotmail.com (Orestis Vantzos)
  • Date: Thu, 13 Mar 2003 03:05:40 -0500 (EST)
  • References: <b4k3ls$8ek$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

My bet is that your memory is used up to store the Out[..]
expressions.
Try:
$HistoryLength=0;

and then:
MemoryInUse[]

memorySoaker[...]

MemoryInUse[]

MemoryInUse[] 
(*Yes, twice...despite $HistoryLength=0 Mathematica still stores the
previous expression*)

I must note that there are no new symbols created inside Compile..
Moral lesson: when looking for memory leaks, the storage of Out[..] is
the usual suspect.
Orestis


Bern <bgress at mail.DOTucr.DOT.edu> wrote in message news:<b4k3ls$8ek$1 at smc.vnet.net>...
> Hello Mathgroup,
> 
> (Paste the following functions into a Notebook:)
> 
> Here is how Compile and Module conspire to leak memory:
> 
> w = Compile[{{XJ, _Real, 1}, {XX, _Real, 1},
>      {nj, _Integer, 0}, {ni, _Integer, 0}},
>     Module[{u}, u = Table[Random[], {i, ni}, {j, nj},
>         {p, 0, 1}]; Table[
>        Last[Inverse[Sum[Outer[Times, u[[i,j]],
>             u[[i,j]]*(XX[[i]] - XJ[[j]])^2],
>            {i, 1, ni}]] . Sum[Table[u[[i,j]]*XX[[i]]*
>             (XX[[i]] - XJ[[j]])^2], {i, 1, ni}]],
>        {j, nj}]]]
> 
> This demonstrates that 'w' is completely Compiled:
> 
> 
> w[[-2]]
> 
> 
> Here is some test data:
> 
> 
> xi=Range[300];xj=Table[Random[],{300}];
> memorySoaker[xi_,xj_,n_]:=Module[{n1=Length[xi],n2=Length[xj]},Do[
>      Print[ToString[MemoryInUse[]]];w[xi,xj,n1,n2];dummy;Print[ToString[\
> MemoryInUse[]]];dummy,{n}]]
> 
> 
> Presumably, upon exit, a Module should release any memory used, no?
> 
> 
> MemoryInUse[]
> memorySoaker[xi,xj,20]
> MemoryInUse[]
> 
> 
> You will notice that memorySoaker is of the same structure as the 
> function, RP from COMBINATORICA.M, the DiscreteMath StandardPackage 
> included in Mathematica.  RP is called by RandomPermutation which is, in 
> turn, called by RandomKSubset, which is a function I complained about 
> leaking memory many months ago.  I am guessing that this is the source 
> of the problem, something to do with the use of a local variable defined 
> in a Module within a Compile statement.
> 
> 
> RP=Compile[{{n,_Integer}},Module[{p=Range[n],i,x,t},
>      Do[x=Random[Integer,{1,i}];
>          t=p[[i]];p[[i]]=p[[x]];p[[x]]=t,{i,n,2,-1}];
>        p],{{Range[_],_Integer,1},{Random[___],_Integer}}]
> 
> 
> Regards,
> 
> Bernard


  • Prev by Date: Re: Problem :mathematica building help browser index
  • Next by Date: Re: Problem :mathematica building help browser index
  • Previous by thread: Re: Compile + Module => Memory Leak
  • Next by thread: Re: Compile + Module => Memory Leak