Details
Description
In the BLAS wrapper, gemm is supposed to update matrix C to be alpha * A * B + beta * C. However, the current implementation will not update C as long as alpha == 0. This is incorrect when beta is not equal to 1.
Example:
val p = 3
val a = DenseMatrix.zeros(p,p)
val b = DenseMatrix.zeros(p,p)
var c = DenseMatrix.eye(p)
BLAS.gemm(0, a, b, 5, c)
c is unchanged in the Spark 1.4 even though it should be multiplied by 5 element-wise.
The bug is caused by the following in BLAS.gemm:
if (alpha == 0.0) {
logDebug("gemm: alpha is equal to 0. Returning C.")
}
Will submit PR to fix this.