JuliaLang/julia — pull request #6235 by andreasnoackjensen (2014-03-22 09:06:35+00:00)
Title: Add specialized methods for complex-real BLAS multiplication.

This implements the method proposed by @stevengj for multiplying a complex matrix with a real matrix or vector. On my computer this gives around a 12x speed up for two 1000x1000 matrices over calling the generic algorithm which is what happens now and it is a double speed up over converting the real array to complex.

The only methods where (I can see that) this is feasible are `A_mul_B(Matrix{Complex},MatOrVec{Real})`, `A_mul_Bt(Matrix{Complex},Matrix})` and by transposing the result also `A_mul_Bt(Matrix{Real},Matrix{Complex})` and `At_mul_Bt(Matrix{Real},Matrix{Complex})`. `A_mul_B(Matrix{Real},Vector{Complex})` could be written in terms of two `dgemv` call with `stride=2`, but in my benchmarks this is not faster than the generic algorithm.

Finally, I tried to write methods for `dot` but it was not faster than the Julia version. Not surprisingly, it appears that it is mainly for level 3 operations that BLAS gives big speed gains.