如何使用 BLAS 执行向量矩阵乘法?
How to perform Vector-Matrix Multiplication with BLAS ?
BLAS定义了GEMV(矩阵向量乘法)level-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
。
为了定义向量-矩阵乘法,应该转置向量。即 a*X(1xM)*A(MxN) + b*Y(1xN) -> Y(1xN)
。基本上你没有一个向量,而是一个单行矩阵。
从这一点出发,有两种可能。
要么使用 level-3 "GEMM"
?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
都以相同的方式顺序存储。这意味着您可以再次使用 GEMV
使用转置矩阵 A
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)
BLAS定义了GEMV(矩阵向量乘法)level-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
。
为了定义向量-矩阵乘法,应该转置向量。即 a*X(1xM)*A(MxN) + b*Y(1xN) -> Y(1xN)
。基本上你没有一个向量,而是一个单行矩阵。
从这一点出发,有两种可能。
要么使用 level-3 "GEMM"
?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
都以相同的方式顺序存储。这意味着您可以再次使用 GEMV
使用转置矩阵 A
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)