为什么BLAS具有用于矩阵 - 矩阵乘法的gemm
函数和用于矩阵向量乘法的单独gemv
函数?矩阵向量乘法不是矩阵乘法的一个特例,其中一个矩阵只有一行/列吗?
答案 0 :(得分:11)
数学上,矩阵向量乘法是矩阵 - 矩阵乘法的一个特例,但在软件库中实现的并不一定如此。
他们支持不同的选择。例如,gemv
支持对其运行的向量进行跨步访问,而gemm
不支持跨步矩阵布局。在C语言绑定中,gemm
要求您指定所有三个矩阵的存储顺序,而gemv
对于向量参数则不需要这样做,因为它没有意义。
除了支持不同的选项外,还有一些可能在gemm
上执行但不适用于gemv
的优化系列。如果您知道自己正在使用矩阵向量产品,那么在切换到针对该情况优化的代码路径之前,您不希望库浪费时间来确定情况;你宁可直接调用它。
答案 1 :(得分:3)
当您优化gemv和gemm时,适用不同的技术:
如果您想了解更多详情,请与我们联系。
答案 2 :(得分:1)
我认为它更适合BLAS层次结构,其级别为1(向量 - 向量),第2级(矩阵向量)和第3级(矩阵 - 矩阵)例程。如果你知道它只是一个向量,它可能会更好一些。