BLAS:gemm vs. gemv

时间:2011-08-15 16:19:50

标签: linear-algebra blas

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

3 个答案:

答案 0 :(得分:11)

数学上,矩阵向量乘法是矩阵 - 矩阵乘法的一个特例,但在软件库中实现的并不一定如此。

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

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

答案 1 :(得分:3)

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

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

如果您想了解更多详情,请与我们联系。

答案 2 :(得分:1)

我认为它更适合BLAS层次结构,其级别为1(向量 - 向量),第2级(矩阵向量)和第3级(矩阵 - 矩阵)例程。如果你知道它只是一个向量,它可能会更好一些。