To expand a little:
julia 0.3: doesn't (and won't) support irregular (Vector{Int}) indexes in 
SubArrays
julia 0.4: does support Vector{Int} indexes in SubArrays
BLAS/LAPACK: does not support, and presumably never will support, "subarrays" 
with irregular indexing.

So as Andreas said, you can do what you're hoping to do if you use julia 0.4 
and don't expect to call BLAS. For small arrays, julia's native routines will 
likely be faster anyway, but for large arrays there is (currently) no beating 
BLAS.

Best,
--Tim

On Sunday, March 29, 2015 06:56:24 PM Andreas Noack wrote:
> It is supported in SubArrays and you can also multiply with these in place
> with A_mul_B!, but this will be calling a generic  multiplication method
> implemented in Julia instead of BLAS. So far it doesn't support the α and β
> arguments of C:=αAB+βC, but I'm working on that.
> 
> 2015-03-29 18:23 GMT-04:00 Dominique Orban <[email protected]>:
> > Unfortunately, my idx will be computed on the fly and there's zero chance
> > that it would be a range. Is there a plan to support more general indexing
> > in subarrays and/or ArrayView?
> > 
> > On Sunday, March 29, 2015 at 6:13:16 PM UTC-4, Andreas Noack wrote:
> >> C[:,idx] creates a copy, so gemm updates a copy of part of C and then
> >> discarts it after the computation. sub(C,:,idx) creates a view instead of
> >> a
> >> copy.
> >> 
> >> 2015-03-29 18:10 GMT-04:00 Dominique Orban <[email protected]>:
> >>> Sorry there was a typo in my example. It should have been
> >>> 
> >>> BLAS.gemm!('N', 'N', 1.0, A[:,idx], B[idx,idx], 1.0, C[:,idx]);
> >>> 
> >>> for the dimensions to work out.
> >>> 
> >>> The gemm! command works fine, is happy with the dimensions, and produces
> >>> the correct update. As far as I can tell,
> >>> 
> >>> C1 = C[:,idx];
> >>> BLAS.gemm!('N', 'N', 1.0, A[:,idx], B[:,idx], 1.0, C1);
> >>> 
> >>> does what it's supposed to do, it just doesn't update C (which is
> >>> awkward for a ! function, though I realize there's something else going
> >>> on
> >>> here).
> >>> 
> >>> On Sunday, March 29, 2015 at 5:56:27 PM UTC-4, Andreas Noack wrote:
> >>>> I think that you could use sub(A,:,2:2:4) for BLAS, but not
> >>>> sub(A,:,[2,4]) because the indexing has to be with ranges for BLAS to
> >>>> be
> >>>> able to extract the right elements of the matrix.
> >>>> 
> >>>> 2015-03-29 17:34 GMT-04:00 Dominique Orban <[email protected]>:
> >>>>> Sorry if this is another [:] kind of question, but I can't seem to
> >>>>> find the right syntax to call BLAS.gemm! on part of an array. The
> >>>>> piece of
> >>>>> code
> >>>>> 
> >>>>> julia> n = 10; m = 5; idx = [2, 4];
> >>>>> julia> C = rand(n, m); A = rand(n, m); B = rand(m, m);
> >>>>> julia> BLAS.gemm!('N', 'N', 1.0, A[:,idx], B[:,idx], 1.0, C[:,idx]);
> >>>>> 
> >>>>> won't modify C. I'm simply trying to do
> >>>>> 
> >>>>> C[:,idx] += A[:,idx] * B[:,idx];
> >>>>> 
> >>>>> What's the right syntax here?
> >>>>> 
> >>>>> It seems ArrayViews.jl might be the way to go, but it doesn't let me
> >>>>> do view(A, :, idx).
> >>>>> 
> >>>>> Thanks!

Reply via email to