Should this be added to a package? I imagine if the arrays are on the GPU (AFArrays) then the operation could be much faster, and having a consistent name would be helpful.
On Wednesday, October 7, 2015 at 1:28:29 AM UTC+11, Lionel du Peloux wrote: > > Dear all, > > I'm looking for the fastest way to do element-wise vector multiplication > in Julia. The best I could have done is the following implementation which > still runs 1.5x slower than the dot product. I assume the dot product would > include such an operation ... and then do a cumulative sum over the > element-wise product. > > The MKL lib includes such an operation (v?Mul) but it seems OpenBLAS does > not. So my question is : > > 1) is there any chance I can do vector element-wise multiplication faster > then the actual dot product ? > 2) why the built-in element-wise multiplication operator (*.) is much > slower than my own implementation for such a basic linealg operation (full > julia) ? > > Thank you, > Lionel > > Best custom implementation : > > function xpy!{T<:Number}(A::Vector{T},B::Vector{T}) > n = size(A)[1] > if n == size(B)[1] > for i=1:n > @inbounds A[i] *= B[i] > end > end > return A > end > > Bench mark results (JuliaBox, A = randn(300000) : > > function CPU (s) GC (%) ALLOCATION (bytes) CPU > (x) > dot(A,B) 1.58e-04 0.00 16 1.0 > xpy!(A,B) 2.31e-04 0.00 80 > 1.5 > NumericExtensions.multiply!(P,Q) 3.60e-04 0.00 80 2.3 > xpy!(A,B) - no @inbounds check 4.36e-04 0.00 80 > 2.8 > P.*Q 2.52e-03 50.36 2400512 > 16.0 > ############################################################ > >