[Numpy-discussion] ANN: numpy.i - added managed deallocation to ARGOUTVIEW_ARRAY1 (ARGOUTVIEWM_ARRAY1)
Egor Zindy
ezindy at gmail.com
Tue Nov 18 14:02:46 EST 2008
Hello list,
I just finished coding all the ARGOUTVIEWM fragments in numpy.i and
wrote a wiki to explain what I did:
http://code.google.com/p/ezwidgets/wiki/NumpyManagedMemory
No new information in there, but everything (explanations, links, code)
is provided on a single page.
Regards,
Egor
Egor Zindy wrote:
> Dear List,
>
> after I tried to write a simple ARGOUTVIEW_ARRAY1 example (see
> http://code.google.com/p/ezwidgets/wiki/NumpySWIGMinGW#A_simple_ARGOUTVIEW_ARRAY1_example
> ), I started wondering about memory deallocation. Turns out a few
> clever people already did all the thinking (see
> http://blog.enthought.com/?p=62 ) and a few more clever people use
> this in a swig file (see http://niftilib.sourceforge.net/pynifti, file
> nifticlib.i).
>
> All this concentrated knowledge helped me implement a single
> ARGOUTVIEWM_ARRAY1 fragment in numpy.i to do some testing (see
> attached numpy.i).
>
> How to use it? In yourfile.i, the %init function has a few lines added
> to it:
>
> %init %{
> import_array();
>
> /* initialize the new Python type for memory deallocation */
> _MyDeallocType.tp_new = PyType_GenericNew;
> if (PyType_Ready(&_MyDeallocType) < 0)
> return; %}
>
> ... and that's it! then just use ARGOUTVIEWM_ARRAY1 instead of
> ARGOUTVIEW_ARRAY1 and python does the deallocation for you when the
> python array is destroyed (see the examples attached).
>
> Everything compiles, but it would be nice to get rid of the warnings...
>
> ezalloc_wrap.c:2763: warning: initialization from incompatible pointer
> type
> ezalloc_wrap.c: In function `_wrap_alloc_managed':
> ezalloc_wrap.c:2844: warning: assignment from incompatible pointer type
> writing build\temp.win32-2.5\Release\_ezalloc.def
>
> Compilation:
> python setup_alloc.py build
>
> Testing:
> The attached test_alloc.py does 2048 allocations of 1MB each for
> managed and unmanaged arrays. Output on my XP laptop with 1GB RAM as
> follows:
>
> ARGOUTVIEWM_ARRAY1 (managed arrays) - 2048 allocations (1048576 bytes
> each)
> Done!
>
> ARGOUTVIEW_ARRAY1 (unmanaged, leaking) - 2048 allocations (1048576
> bytes each)
> Step 482 failed
>
>
> TODO:
> Find a better name for the methods (not sure I like
> ARGOUTVIEWM_ARRAY), then do the missing fragments (2D arrays), clear
> the warnings and verify the method for a possible inclusion in the
> official numpy.i file.
>
> Thank you for reading!
>
> Regards,
> Egor
>
More information about the NumPy-Discussion
mailing list