Matrix 如何使用BLAS执行向量矩阵乘法?
BLAS定义了GEMV(矩阵向量乘法)2级操作。如何使用BLAS库执行向量矩阵乘法Matrix 如何使用BLAS执行向量矩阵乘法?,matrix,matrix-multiplication,blas,Matrix,Matrix Multiplication,Blas,BLAS定义了GEMV(矩阵向量乘法)2级操作。如何使用BLAS库执行向量矩阵乘法 这可能很明显,但我不知道如何使用BLAS运算进行乘法。我本以为会有GEVM操作 一个(M x N)矩阵与一个(N x 1)向量的矩阵向量相乘将得到一个(M x 1)向量。简而言之a*a(MxN)*X(Nx1)+b*Y(Mx1)->Y(Mx1)。当然,当向量包含在矩阵中时,可以使用INCX和INCY 为了定义向量矩阵乘法,应该对向量进行转置。i、 e.a*X(1xM)*a(MxN)+b*Y(1xN)->Y(1xN)
这可能很明显,但我不知道如何使用BLAS运算进行乘法。我本以为会有GEVM操作 一个(M x N)矩阵与一个(N x 1)向量的矩阵向量相乘将得到一个(M x 1)向量。简而言之
a*a(MxN)*X(Nx1)+b*Y(Mx1)->Y(Mx1)
。当然,当向量包含在矩阵中时,可以使用INCX
和INCY
为了定义向量矩阵乘法,应该对向量进行转置。i、 e.a*X(1xM)*a(MxN)+b*Y(1xN)->Y(1xN)
。基本上你没有向量,只有一行矩阵
从这一点出发,有两种可能性
要么使用3级“GEMM”
使用
或者多做点数学。考虑到(X*A)^T=A^T*X^T
,行矩阵X
被转换为向量X^T(MX1)。同样Y
转置是向量Y^T(Nx1)
。当然,内存方面的X
和X^T
都是以相同的方式顺序存储的。这意味着您可以再次使用转置矩阵A
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)
转置(x)。转置(A)=A.x感谢解释和精确的例子,它工作得很好:)我两个都试过了。但是
?gemm
的速度大约是?gemv
的2~3倍。难道?gemv
不应该总是比?gemm
快吗?
?gemm('N', 'N', 1, N, M, a, X, 1, A, M, b, Y, 1)
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)