If you make a mistake, segfault.

On Sat, Dec 28, 2013 at 3:35 PM, Toivo Henningsson <[email protected]>wrote:

> So what happens if you use Tim's sneaky workaround and resize the 1d
> array? I suppose that the pointer is no longer valid...
>
>
> On Saturday, 28 December 2013 18:25:50 UTC+1, Stefan Karpinski wrote:
>
>> The issue was bounds check elimination, which is already a problem for 1d
>> arrays. Currently it's very hard to eliminate them because arrays can get
>> resized out from under you at any point.
>>
>> > On Dec 28, 2013, at 10:08 AM, Tim Holy <[email protected]> wrote:
>> >
>> > Holding columns in separate entries is a great way. However, if you
>> need to do
>> > linear algebra on the matrix at intermediate stages during its growth,
>> then
>> > you'll have a lot of needless copying occurring while you convert the
>> column-
>> > storage into a matrix.
>> >
>> > In such circumstances, there's a sneaky workaround:
>> >
>> >    reshape1(a::Vector, dims::Dims) = pointer_to_array(pointer(a), dims)
>> >
>> >    a = zeros(3)
>> >    c = ones(3)
>> >    append!(a, c)
>> >    A = reshape1(a, (3, div(length(a),3)))
>> >    c += 1
>> >    append!(a, c)
>> >    A = reshape1(a, (3, div(length(a),3)))
>> >
>> > Using pointer_to_array circumvents the ordinary protections built into
>> resize!
>> > There's still allocation occurring (it has to build a new Array
>> "wrapper" on
>> > each iteration), but it avoids copying any data, and for large amounts
>> of data
>> > this is a big win.
>> >
>> > Even better would be to generalize resize! to support the final
>> dimension of
>> > any array. I seem to remember Stefan had a reason why this might be
>> > problematic, but I confess I forget what it is.
>> >
>> > --Tim
>> >
>> >
>> >> On Friday, December 27, 2013 05:45:15 PM Sheehan Olver wrote:
>> >> What's the "best" way of constructing an array that can grow
>> adaptively?
>> >> For example, it has fixed m rows but the number of columns grows as an
>> >> algorithm proceeds.  Unfortunately,
>> >>
>> >> resize!
>> >>
>> >> doesn't work for 2d arrays.  It does work for
>> Array{Array{Float64,1},1},
>> >> but not sure that's optimal.
>>
>

Reply via email to