[Numpy-discussion] GSOC 2013
Wed Mar 6 04:29:52 CST 2013
On 3/5/13 7:14 PM, Kurt Smith wrote:
> On Tue, Mar 5, 2013 at 1:45 AM, Eric Firing <firstname.lastname@example.org> 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 : dt = np.dtype(dict(names=['a', 'b'], formats=['u1', 'u8']),
>> In : dt.itemsize
>> Out: 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.
More information about the NumPy-Discussion