On Saturday, December 28, 2013 12:25:50 PM 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.

Thanks for the reminder.

--Tim

> > 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