[Numpy-discussion] numpy ndarray questions

Jochen cycomanic@gmail....
Mon Jan 26 23:03:08 CST 2009


On Tue, 2009-01-27 at 13:28 +0900, David Cournapeau wrote:
> Jochen wrote:
> > On Tue, 2009-01-27 at 12:49 +0900, David Cournapeau wrote:
> >   
> >> Jochen wrote:
> >>     
> >>> Hi all,
> >>>
> >>> I just wrote ctypes bindings to fftw3 (see
> >>> http://projects.scipy.org/pipermail/scipy-user/2009-January/019557.html
> >>> for the post to scipy). 
> >>> Now I have a couple of numpy related questions:
> >>>
> >>> In order to be able to use simd instructions I 
> >>> create an ndarray subclass, which uses fftw_malloc to allocate the
> >>> memory and fftw_free to free the memory when the array is deleted. This
> >>> works fine for inplace operations however if someone does something like
> >>> this:
> >>>
> >>> a = fftw3.AlignedArray(1024,complex)
> >>>
> >>> a = a+1
> >>>
> >>> a.ctypes.data points to a different memory location (this is actually an
> >>> even bigger problem when executing fftw plans), however 
> >>> type(a) still gives me <class 'fftw3.planning.AlignedArray'>.
> >>>   
> >>>       
> >> I can't comment about subclassing ndarrays, but I can give you a hint
> >> about aligned allocator problem: you could maintain two list of cached
> >> plans, automatically detect whether your arrays are aligned or not, and
> >> use the appropriate list of plans; one list is for aligned arrays, one
> >> for unaligned. Before removing support for fftw, I played with some C++
> >> code to do exactly that. You can tell fftw to create plans for unaligned
> >> arrays by using FFTW_UNALIGNED flag:
> >>
> >> http://projects.scipy.org/scipy/scipy/browser/branches/refactor_fft/scipy/fftpack/backends/fftw3/src/zfft.cxx
> >>
> >> cheers,
> >>
> >> David
> >>     
> >
> > Hi David,
> >
> > I have actually kept more closely to the fftw way of doing things, i.e.
> > I create a plan python object from two arrays, it also stores the two
> > arrays to prevent someone to delete the original arrays and then
> > executing the plan.
> 
> I am not sure I follow you when you say the "fftw way": you can avoid
> having to store the arrays altogether while still using fftw plans,
> there is nothing "unfftw" about using plans that way. I think trying to
> guarantee that your arrays data buffers won't change is more complicated.
> 
> David

Sorry maybe I wasn't quite clear, what I mean by the "fftw way" is
creating a plan and executing the plan, instead of doing x=fft(y). As
you say the problem comes when you execute a plan on arrays which don't
exist anymore, which causes python to segfault (I'm talking about using
fftw_execute() not fftw_execute_dft). So yes essentially my problem is
trying to ensure that the buffer does not change. BTW memmap arrays have
the same problem
if I create a memmap array and later do something like 
a=a+1
all later changes will not be written to the file. 

BTW I just answered to you in the other thread on scipy-users as well,
I'll try to just keep the rest of my posts here so people don't have to
look at two lists if they want to follow things.


Cheers
Jochen

> ______
> _________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion



More information about the Numpy-discussion mailing list