Re: Memory Leak
- To: mathgroup at smc.vnet.net
- Subject: [mg66878] Re: Memory Leak
- From: ab_def at prontomail.com
- Date: Fri, 2 Jun 2006 04:09:06 -0400 (EDT)
- References: <e5jrth$e09$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Lawrence Weintraub wrote:
> I've looked through the many comments on memory leaks and cannot solve my
> montonically increasing memory usage. Setting $HistoryLength=0 doesn't
> help. Using ClearCache[] doesn't do much either. If anyone could help
> me, I'd be very grateful. My (simplified) code is:
>
> $HistoryLength=0;
>
> memEater[smin_?Positive, smax_, sigma_?Positive, fluxes_] :=
> Module[{s, snew, snoise, result, noisevec, bigvec, ds = 0.01, likes,
> likeFunc,t},
> snMin = -40.*sigma;
> s = Range[Min[fluxes], Max[fluxes], ds];
> snoise = Range[snMin, -snMin, ds];
> noisevec = Exp[-(Range[snMin, -snMin, ds])^2];
> bigvec = ListConvolve[noisevec, Abs[s], {1, -1}, 0.0];
> snew = Range[s[[1]] + snoise[[1]],s[[-1]] + snoise[[-1]],ds];
> s =.;
> snoise =.; noisevec =.;
> t = Transpose[{snew, bigvec}];
> likeFunc = Interpolation[t];
> t =.; snew =.; bigvec =.;
> likes = likeFunc[#] & /@ fluxes;
> Clear["likeFunc$*"];
> result = If[Min[likes] < 0, -10.*Length[fluxes],
> Plus @@ (Log[#] & /@ likes)]; likes =.;
> result];
>
> When I run this:
>
> ct = 0; mem0 = MemoryInUse[];
> fluxes = Table[Random[]*35. - 5., {i, 1000}];
> Do[mem = MemoryInUse[];
> res = memEater[.2, 30., 0.3, fluxes];
> Print[MemoryInUse[] - mem0];
> Developer`ClearCache[];
> Print[MemoryInUse[] - mem0];,{10}];
>
> From In[82]:=
> 46080
>
> From In[82]:=
> 46080
>
> From In[82]:=
> 93320
>
> From In[82]:=
> 93320
>
> From In[82]:=
> 140560
>
> From In[82]:=
> 140560
>
> From In[82]:=
> 187800
>
> From In[82]:=
> 187800
>
> From In[82]:=
> 235040
>
> From In[82]:=
> 235040
>
> From In[82]:=
> 282280
>
> From In[82]:=
> 282280
>
> From In[82]:=
> 329520
>
> From In[82]:=
> 329520
>
> From In[82]:=
> 376760
>
> From In[82]:=
> 376760
>
> From In[82]:=
> 424000
>
> From In[82]:=
> 424000
>
> From In[82]:=
> 471240
>
> From In[82]:=
> 471240
>
>
>
> Larry Weintraub
> Astrophysics
> California Institute of Technology
> 1200 E California Blvd
> MC 105-24
> Pasadena, CA 91125
>
> lcw at astro.caltech.edu
> 626-395-4051
The memory leak is caused by Interpolation:
tmp = MaxMemoryUsed[];
ListPlot[Table[
Interpolation[Array[N@ {#, 2*#}&, 5000]]; MaxMemoryUsed[],
{100}] - tmp]
FindFit gives an estimate of 40000 bytes per iteration, so it looks
like Interpolation leaves behind a list of 5000 reals.
ListInterpolation doesn't seem to have this problem, so just replace
likeFunc = Interpolation[t] with likeFunc = ListInterpolation[bigvec,
{snew}].
Maxim Rytin
m.r at inbox.ru