BLAS:gemm vs. gemv

dsi*_*cha 21 linear-algebra blas

为什么BLAS具有gemm矩阵 - 矩阵乘法gemv功能和矩阵向量乘法的单独函数?矩阵向量乘法不是矩阵乘法的一个特例,其中一个矩阵只有一个行/列吗?

Ste*_*non 11

在数学上,矩阵向量乘法是矩阵 - 矩阵乘法的一种特殊情况,但在软件库中实现的并不一定如此.

他们支持不同的选择.例如,gemv支持跨越对其运行的向量的访问,gemm而不支持跨步矩阵布局.在C语言绑定中,gemm要求您指定所有三个矩阵的存储顺序,而gemv对于向量参数则不需要,因为它没有意义.

除了支持不同的选项外,还有一系列可能执行的优化gemm不适用于gemv.如果您知道自己正在使用矩阵向量产品,那么在切换到针对该情况优化的代码路径之前,您不希望库浪费时间来确定情况; 你宁可直接调用它.

  • gemm 使用“lda、ldb、ldc”参数,它们是行/列跨度,通过它们,您可以在传递向量时将列矩阵表达为与“inc”参数相同的内容。所以它最终是等价的。 (2认同)

Mic*_*ehn 6

当您优化 gemv 和 gemm 时,应用不同的技术:

  • 对于矩阵-矩阵运算,您使用的是阻塞算法。块大小取决于缓存大小。
  • 为了优化矩阵向量积,您可以使用所谓的融合 1 级运算(例如融合点积或融合 axpy)。

如果您想了解更多详细信息,请告诉我。

  • 是的,对于实际的矩阵向量乘积 gemv 具有更好的性能(假设您不将不好的 gemv 实现与好的 gemm 实现进行比较)。话虽如此,使用 gemv 操作您永远无法达到峰值性能。因此,数值线性代数的技巧是找到利用矩阵-矩阵乘积的算法变体(所谓的块算法)。 (2认同)