【问题标题】:How to perform Vector-Matrix Multiplication with BLAS ?如何使用 BLAS 执行向量矩阵乘法?
【发布时间】:2015-06-10 21:57:34
【问题描述】:

BLAS 定义了 GEMV(矩阵向量乘法)2 级操作。如何使用 BLAS 库执行向量矩阵乘法?

这可能很明显,但我不知道如何使用 BLAS 操作进行这种乘法运算。我本来希望进行 GEVM 操作。

【问题讨论】:

  • 转置(x)。转置(A)=A.x

标签: matrix matrix-multiplication blas


【解决方案1】:

(M x N) 矩阵与 (N x 1) 向量的矩阵向量乘法将产生 (M x 1) 向量。简而言之a*A(MxN)*X(Nx1) + b*Y(Mx1) -> Y(Mx1)。当然,当您的向量包含在矩阵中时,您可以使用INCXINCY

为了定义向量矩阵乘法向量应该被转置。即a*X(1xM)*A(MxN) + b*Y(1xN) -> Y(1xN)。基本上你没有一个向量,而是一个单行矩阵。

从这一点开始有两种可能。

要么使用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)。当然,内存方面XX^T 都以相同的方式按顺序存储。这意味着您可以使用转置矩阵A 再次使用GEMV

?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)

【讨论】:

  • 感谢您的解释和精确的例子,它运作良好:)
  • 我都试过了。但是?gemm?gemv 快大约 2~3 倍。 ?gemv 不应该总是比?gemm 快吗?
猜你喜欢
  • 2018-04-11
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
相关资源
最近更新 更多