Here's an obligatory plug for the two following PRs:
https://github.com/numpy/numpy/pull/5457
https://github.com/numpy/numpy/pull/5470

Regards

Antoine.


On Fri, 6 May 2016 15:01:32 +0200
Francesc Alted <fal...@gmail.com> wrote:
> 2016-05-05 22:10 GMT+02:00 Øystein Schønning-Johansen <oyste...@gmail.com>:
> 
> > Thanks for your answer, Francesc. Knowing that there is no numpy solution
> > saves the work of searching for this. I've not tried the solution described
> > at SO, but it looks like a real performance killer. I'll rather try to
> > override malloc with glibs malloc_hooks or LD_PRELOAD tricks. Do you think
> > that will do it? I'll try it and report back.
> >
> 
> I don't think you need that much weaponry.  Just create an array with some
> spare space for alignment.  Realize that you want a 64-byte aligned double
> precision array.  With that, create your desired array + 64 additional
> bytes (8 doubles):
> 
> In [92]: a = np.zeros(int(1e6) + 8)
> 
> In [93]: a.ctypes.data % 64
> Out[93]: 16
> 
> and compute the elements to shift this:
> 
> In [94]: shift = (64 / a.itemsize) - (a.ctypes.data % 64) / a.itemsize
> 
> In [95]: shift
> Out[95]: 6
> 
> now, create a view with the required elements less:
> 
> In [98]: b = a[shift:-((64 / a.itemsize)-shift)]
> 
> In [99]: len(b)
> Out[99]: 1000000
> 
> In [100]: b.ctypes.data % 64
> Out[100]: 0
> 
> and voila, b is now aligned to 64 bytes.  As the view is a copy-free
> operation, this is fast, and you only wasted 64 bytes.  Pretty cheap indeed.
> 
> Francesc
> 
> 
> >
> > Thanks,
> > -Øystein
> >
> > On Thu, May 5, 2016 at 1:55 PM, Francesc Alted <fal...@gmail.com> wrote:
> >
> >> 2016-05-05 11:38 GMT+02:00 Øystein Schønning-Johansen <oyste...@gmail.com
> >> >:
> >>
> >>> Hi!
> >>>
> >>> I've written a little code of numpy code that does a neural network
> >>> feedforward calculation:
> >>>
> >>>     def feedforward(self,x):
> >>>         for activation, w, b in zip( self.activations, self.weights,
> >>> self.biases ):
> >>>             x = activation( np.dot(w, x) + b)
> >>>
> >>> This works fine when my activation functions are in Python, however I've
> >>> wrapped the activation functions from a C implementation that requires the
> >>> array to be memory aligned. (due to simd instructions in the C
> >>> implementation.) So I need the operation np.dot( w, x) + b to return a
> >>> ndarray where the data pointer is aligned. How can I do that? Is it
> >>> possible at all?
> >>>
> >>
> >> Yes.  np.dot() does accept an `out` parameter where you can pass your
> >> aligned array.  The way for testing if numpy is returning you an aligned
> >> array is easy:
> >>
> >> In [15]: x = np.arange(6).reshape(2,3)
> >>
> >> In [16]: x.ctypes.data % 16
> >> Out[16]: 0
> >>
> >> but:
> >>
> >> In [17]: x.ctypes.data % 32
> >> Out[17]: 16
> >>
> >> so, in this case NumPy returned a 16-byte aligned array which should be
> >> enough for 128 bit SIMD (SSE family).  This kind of alignment is pretty
> >> common in modern computers.  If you need 256 bit (32-byte) alignment then
> >> you will need to build your container manually.  See here for an example:
> >> http://stackoverflow.com/questions/9895787/memory-alignment-for-fast-fft-in-python-using-shared-arrrays
> >>
> >> Francesc
> >>
> >>
> >>>
> >>> (BTW: the function works  correctly about 20% of the time I run it, and
> >>> else it segfaults on the simd instruction in the the C function)
> >>>
> >>> Thanks,
> >>> -Øystein
> >>>
> >>> _______________________________________________
> >>> NumPy-Discussion mailing list
> >>> NumPy-Discussion@scipy.org
> >>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
> >>>
> >>>
> >>
> >>
> >> --
> >> Francesc Alted
> >>
> >> _______________________________________________
> >> NumPy-Discussion mailing list
> >> NumPy-Discussion@scipy.org
> >> https://mail.scipy.org/mailman/listinfo/numpy-discussion
> >>
> >>
> >
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion@scipy.org
> > https://mail.scipy.org/mailman/listinfo/numpy-discussion
> >
> >
> 
> 



_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
https://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to