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