mspieg wrote:
> 
> On Feb 6, 2009, at 6:35 PM, Garth N. Wells wrote:
> 
>>
>>
>> mspieg wrote:
>>> Hi All,
>>>    I'm playing with some characteristic based advection schemes in 
>>> Dolfin (0.9.0) which require a large number of discrete Function 
>>> evals.  This seems to be leading to a large memory leak as the 
>>> process grows considerably in size with every time-step.  I've put 
>>> together a small (badly written) program that demonstrates the 
>>> problem which I've tried to isolate just to IntersectionDetector (and 
>>> the underlying GTS). I suspect the problem is in GTS, but thought I 
>>> would start with Dolfin support.  Any thoughts/help greatly 
>>> appreciated...
>>
>> I recall that quite some time ago some memory leaks were fixed in the 
>> DOLFIN GTS interface, but there remained some GTS problems. Have you 
>> run valgrind?
> 
> Thanks Garth,
>    I've been developing on  mac OSX 10.4 which valgrind doesn't support 
> (yet ?).  I can probably dig up a linux box and run valgrind (but if 
> someone else can do it faster that would be great).  Apple has an 
> application MallocDebug, which I've started playing with, but it seems 
> to be choking on some of the libraries.  I'll let you know if I make any 
> progress.  If anyone else has some insight or can easily run valgrind on 
> this code (assuming that it develops the same memory issues under Linux 
> as MacOSX), that would be great.
> 

I think that I've fixed the leak (using top to view the memory use, it 
now remains constant). I ran valgrind on the original code and it didn't 
pick anything up but there was definitely a leak. GTS has an odd 
interface which I would say contributed to the DOLFIN-side leak.

Garth

> cheers
> marc
> 
>>
>> Garth
>>
>>> Cheers
>>> marc
>>> ----------------------------------------------------
>>> Marc Spiegelman
>>> Lamont-Doherty Earth Observatory
>>> Dept. of Applied Physics/Applied Math
>>> Columbia University
>>> http://www.ldeo.columbia.edu/~mspieg
>>> tel: 845 704 2323 (SkypeIn)
>>> ----------------------------------------------------
>>> p.s. Some basic info
>>> Dolfin (0.9.0) hg development version (ported to PETSc-3.0.0)
>>> GTS (0.7.6) built from source
>>> MacOSX 10.4.11
>>> g++ i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. 
>>> build 5370)
>>> boost 1.33.1
>>> test code
>>> ----------------------------------------------
>>> // Copyright (C) 2009 Marc Spiegelman
>>> // Licensed under the GNU LGPL Version 2.1.
>>> //
>>> // First added:  2008-10-08
>>> // Last changed:  5 Feb 2009 17:16:07
>>> //
>>> // Heavily modified from dolfin/demo/mesh/intersection code
>>> // Program to demonstrated memory leak from  large number of random 
>>> GTS intersectionDetector tests
>>> // uses boost uniform random number generator for fun
>>> // // Note: if you just continually test the point {0.5, 0.5} 
>>> (comment out the random number generator)
>>> //  the number of intersected cells is 6 rather than 1 and the memory 
>>> leak is much more pronounced
>>> // #include <dolfin.h>
>>> #include <boost/random.hpp>
>>> using namespace dolfin;
>>> typedef boost::mt19937 base_generator_type;
>>> int main()
>>> {
>>>   // Create square mesh
>>>   unsigned int N = 64;
>>>   UnitSquare mesh(N, N);
>>>   //create IntersectionDetector
>>>   IntersectionDetector ID(mesh);
>>>       // set initial point
>>>   double x[2] = {0.5, 0.5 };
>>>   Point p(2,x);
>>>   //initialize cell Array
>>>   std::vector<dolfin::uint> cells;
>>>   std::vector<dolfin::uint>::iterator cellIterator;
>>>   //setup boost uniform variate random number generators
>>>   base_generator_type  generator(42u);
>>>   boost::uniform_real<> uni_dist(0,1);
>>>   boost::variate_generator<base_generator_type&, 
>>> boost::uniform_real<> > uni(generator, uni_dist);
>>>     dolfin::uint k, k_max = N*N*5000, k_print = 100;
>>>   dolfin::uint n_cells, n_cells_print=2;
>>>   //calculate a random intersection k_max times
>>>   for (k = 0; k < k_max; k++ ) {
>>>     ID.intersection(p, cells);
>>>     n_cells = cells.size();
>>>     //print out information if number of cells in intersection 
>>> matches n_cells_print (or every k_print grid_sweep)
>>>     if (n_cells >= n_cells_print || k%(N*N*k_print) == 0 ) {
>>>       printf("k=%d, p=[%f, %f], NCells=%d:  ", k, p.x(), p.y(), (int) 
>>> cells.size()) ;
>>>       for  (cellIterator = cells.begin(); cellIterator < cells.end(); 
>>> cellIterator++) {
>>> printf("%d ",*cellIterator);
>>>       }
>>>       printf("\n");
>>>     }
>>>     // get new random point (comment out to really blow up)
>>>     p[0] = uni();
>>>     p[1] = uni();
>>>     // clear cells array (cells  grows with every test otherwise, not 
>>> sure if this generates a memory leak)
>>>     cells.clear();   }
>>>   return(0);
>>> }
>>> ------------------------------------------------------------------------
>>> _______________________________________________
>>> DOLFIN-dev mailing list
>>> [email protected] <mailto:[email protected]>
>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
>>
> 
> ----------------------------------------------------
> Marc Spiegelman
> Lamont-Doherty Earth Observatory
> Dept. of Applied Physics/Applied Math
> Columbia University
> http://www.ldeo.columbia.edu/~mspieg
> tel: 845 704 2323 (SkypeIn)
> ----------------------------------------------------
> 
> 


_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to