On 3/5/13 7:14 PM, Kurt Smith wrote: > On Tue, Mar 5, 2013 at 1:45 AM, Eric Firing <[email protected]> wrote: >> On 2013/03/04 9:01 PM, Nicolas Rougier wrote: >>>>> This made me think of a serious performance limitation of structured >>>>> dtypes: a >>>>> structured dtype is always "packed", which may lead to terrible byte >>>>> alignment >>>>> for common types. For instance, `dtype([('a', 'u1'), ('b', >>>>> 'u8')]).itemsize == 9`, >>>>> meaning that the 8-byte integer is not aligned as an equivalent C-struct's >>>>> would be, leading to all sorts of horrors at the cache and register level. >> Doesn't the "align" kwarg of np.dtype do what you want? >> >> In [2]: dt = np.dtype(dict(names=['a', 'b'], formats=['u1', 'u8']), >> align=True) >> >> In [3]: dt.itemsize >> Out[3]: 16 > Thanks! That's what I get for not checking before posting. > > Consider this my vote to make `aligned=True` the default.
I would not run too much. The example above takes 9 bytes to host the structure, while a `aligned=True` will take 16 bytes. I'd rather let the default as it is, and in case performance is critical, you can always copy the unaligned field to a new (homogeneous) array. -- Francesc Alted _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
