Hi,

On Tue, Jul 16, 2013 at 11:55 AM, Nathaniel Smith <n...@pobox.com> wrote:

> On Tue, Jul 16, 2013 at 2:34 PM, Arink Verma <arinkve...@gmail.com> wrote:
>
>> >Each ndarray does two mallocs, for the obj and buffer. These could be
>> combined into 1 - just allocate the total size and do some pointer
>> >arithmetic, then set OWNDATA to false.
>> So, that two mallocs has been mentioned in project introduction. I got
>> that wrong.
>>
>
> On further thought/reading the code, it appears to be more complicated
> than that, actually.
>
> It looks like (for a non-scalar array) we have 2 calls to PyMem_Malloc: 1
> for the array object itself, and one for the shapes + strides. And, one
> call to regular-old malloc: for the data buffer.
>
> (Mysteriously, shapes + strides together have 2*ndim elements, but to hold
> them we allocate a memory region sized to hold 3*ndim elements. I'm not
> sure why.)
>
> And contrary to what I said earlier, this is about as optimized as it can
> be without breaking ABI. We need at least 2 calls to malloc/PyMem_Malloc,
> because the shapes+strides may need to be resized without affecting the
> much larger data area. But it's tempting to allocate the array object and
> the data buffer in a single memory region, like I suggested earlier. And
> this would ALMOST work. But, it turns out there is code out there which
> assumes (whether wisely or not) that you can swap around which data buffer
> a given PyArrayObject refers to (hi Theano!). And supporting this means
> that data buffers and PyArrayObjects need to be in separate memory regions.
>

Are you sure that Theano "swap" the data ptr of an ndarray? When we play
with that, it is on a newly create ndarray. So a node in our graph, won't
change the input ndarray structure. It will create a new ndarray structure
with new shape/strides and pass a data ptr and we flag the new ndarray with
own_data correctly to my knowledge.

If Theano pose a problem here, I'll suggest that I fix Theano. But
currently I don't see the problem. So if this make you change your mind
about this optimization, tell me. I don't want Theano to prevent
optimization in NumPy.

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

Reply via email to