BLAS定义了GEMV(矩阵-向量乘法)二级运算。如何使用BLAS库执行向量-矩阵乘法?
这可能是显而易见的,但我不知道如何使用BLAS操作进行此乘法。我本来期望有一个GEVM操作。
BLAS定义了GEMV(矩阵-向量乘法)二级运算。如何使用BLAS库执行向量-矩阵乘法?
这可能是显而易见的,但我不知道如何使用BLAS操作进行此乘法。我本来期望有一个GEVM操作。
a*A(MxN)*X(Nx1) + b*Y(Mx1) -> Y(Mx1)
。当向量包含在矩阵中时,当然可以使用INCX
和INCY
。a*X(1xM)*A(MxN) + b*Y(1xN) -> Y(1xN)
。基本上,你没有一个向量,而是一个单行矩阵。?gemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
使用
?gemm('N', 'N', 1, N, M, a, X, 1, A, M, b, Y, 1)
或者进行更多的数学计算。考虑到 (X*A)^T = A^T * X^T
,行矩阵 X
被转换成向量 X^T(MX1)。同样地,Y
转置为向量 Y^T(Nx1)
。当然,就内存而言,X
和 X^T
以相同的方式顺序存储。这意味着您可以再次使用转置矩阵 A
进行 GEMV
。
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)
?gemm
比?gemv
快2~3倍。?gemv
不应该总是比?gemm
快吗? - mintaka