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 =X> Memory Leak; Outer & Compile =>Memory Leak

  • To: mathgroup at smc.vnet.net
  • Subject: [mg40055] Re: Compile + Module =X> Memory Leak; Outer & Compile =>Memory Leak
  • From: atelesforos at hotmail.com (Orestis Vantzos)
  • Date: Mon, 17 Mar 2003 03:35:49 -0500 (EST)
  • References: <b4mocf$inm$1@smc.vnet.net> <b4pdj8$b8r$1@smc.vnet.net> <b51adv$34t$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

I actually think that you are right!
Try:
$HistoryLength=0;
outComp = Compile[{{XJ, _Real, 1}, {XN, _Real, 1}}, Outer[List, XJ, XN]];
MemoryInUse[]

outComp[Table[Random[],{100}],Table[Random[],{100}]];

MemoryInUse[];

MemoryInUse[]

There is a distinct reduction in free memory.
Replacing Outer[___] with Inner[XJ,XN] eliminates the memory leak.
Very weird...
Orestis

Bern <bgress at mail.DOTucr.DOT.edu> wrote in message news:<b51adv$34t$1 at smc.vnet.net>...
> Dear Mr. Kuska,
> 
> Thanks for this help.  I was not however able to get your change of 
> Module to Block to work, presumably because you are asking Compile to 
> work with a global variable, which it won't do.
> 
> After some experimentation I discovered that you are correct, it isn't 
> the fault of either Block, Module, or even With, all of which can be 
> used here.  The real problem is Outer.  Redefining the first Sum to use 
> Dot and Transpose, instead of Outer, fixed the problem completely.  No 
> more memory leak.
> 
> So my new hypothesis is that Outer + Compile causes a Memory Leak.  This 
> is under Mathematica 4.2 & Windows2K.  Does Wolfram monitor these posts?
> 
> Regards,
> 
> Bernard
> 
> > The problem has nothing to do with Module[] or Block[] because
> > the memory is allmost constant with the uncompiled...
> > u;
> > w = Compile[{{XJ, _Real, 1}, {XX, _Real, 1}, {nj, _Integer}, {ni,
> > _Integer}}, 
> >     Block[{p}, 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}]], {{u, _Real, 3}}]
>  
> > that does not change the memory *and* is significant faster than the
> > original function with the local u.
>  
> > Regards
> >   Jens


  • Prev by Date: Re: Re: Histogram normalization
  • Next by Date: RE: RE: How to apply one plot range to another plot?
  • Previous by thread: Re: Compile + Module =X> Memory Leak; Outer & Compile =>Memory Leak
  • Next by thread: discretization and plotting pde system