[Numpy-discussion] Byte aligned arrays

Nathaniel Smith njs@pobox....
Wed Dec 19 08:43:58 CST 2012


On Wed, Dec 19, 2012 at 8:40 AM, Henry Gomersall <heng@cantab.net> wrote:
> I've written a few simple cython routines for assisting in creating
> byte-aligned numpy arrays. The point being for the arrays to work with
> SSE/AVX code.
>
> https://github.com/hgomersall/pyFFTW/blob/master/pyfftw/utils.pxi
>
> The change recently has been to add a check on the CPU as to what flags
> are supported (though it's not complete, I should make the default
> return 0 or something).
>
> It occurred to me that this is something that (a) other people almost
> certainly need and are solving themselves and (b) I lack the necessary
> platforms to test all the possible CPU/OS combinations to make sure
> something sensible happens in all cases.
>
> Is this something that can be rolled into Numpy (the feature, not my
> particular implementation or interface - though I'd be happy for it to
> be so)?
>
> Regarding (b), I've written a test case that works for Linux on x86-64
> with GCC (my platform!). I can test it on 32-bit windows, but that's it.
> Is ARM supported by Numpy? Neon would be great to include as well. What
> other platforms might need this?

Your code looks simple and portable to me (at least the alignment
part). I can see a good argument for adding this sort of functionality
directly to numpy with a nice interface, though, since these kind of
requirements seem quite common these days. Maybe an interface like
  a = np.asarray([1, 2, 3], base_alignment=32)  # should this be in
bits or in bytes?
  b = np.empty((10, 10), order="C", base_alignment=32)
  # etc.
  assert a.base_alignment == 32
which underneath tries to use posix_memalign/_aligned_malloc when
possible, or falls back on the overallocation trick otherwise?

-n


More information about the NumPy-Discussion mailing list