为什么 BLAS 有一个gemm
矩阵-矩阵乘法的gemv
函数和一个单独的矩阵-向量乘法函数?矩阵向量乘法不只是矩阵矩阵乘法的一种特殊情况,其中一个矩阵只有一行/列吗?
问问题
10876 次
3 回答
14
在数学上,矩阵-向量乘法是矩阵-矩阵乘法的一种特殊情况,但在软件库中实现的不一定是这样的。
他们支持不同的选择。例如,gemv
支持对其正在操作的向量进行跨步访问,gemm
而不支持跨步矩阵布局。在 C 语言绑定中,gemm
要求您指定所有三个矩阵的存储顺序,而这gemv
对于向量参数来说是不必要的,因为它没有意义。
除了支持不同的选项外,还有一些可能执行的优化系列gemm
不适用于gemv
. 如果您知道自己正在做矩阵向量乘积,那么您不希望库在切换到针对该情况优化的代码路径之前浪费时间弄清楚情况;你宁愿直接调用它。
于 2011-08-15T16:44:32.543 回答
4
当您优化 gemv 和 gemm 时,应用了不同的技术:
- 对于矩阵矩阵运算,您使用的是阻塞算法。块大小取决于缓存大小。
- 为了优化矩阵向量积,您使用所谓的融合级别 1 操作(例如融合点积或融合 axpy)。
如果您想了解更多详情,请告诉我。
于 2014-12-01T12:04:36.767 回答
1
我认为它的 1 级(向量-向量)、2 级(矩阵-向量)和 3 级(矩阵-矩阵)例程更适合 BLAS 层次结构。如果你知道它只是一个向量,它可能会更好地优化。
于 2011-08-15T16:38:37.153 回答