为什么BLAS有一个用于矩阵-矩阵乘法的gemm函数和一个用于矩阵-向量乘法的单独的gemv函数?矩阵-向量乘法不只是矩阵-矩阵乘法的特例,其中一个矩阵只有一行/列吗?
发布于 2011-08-16 00:44:33
从数学上讲,矩阵-向量乘法是矩阵-矩阵乘法的特例,但在软件库中实现的情况并不一定如此。
它们支持不同的选项。例如,gemv支持对它正在操作的向量的跨步访问,而gemm不支持跨步矩阵布局。在C语言绑定中,gemm要求您指定所有三个矩阵的存储顺序,而在gemv中,这对于向量参数是不必要的,因为这是没有意义的。
除了支持不同的选项外,还有一系列可能在gemm上执行的不适用于gemv的优化。如果你知道你正在做一个矩阵向量乘积,你不想让库在切换到针对这种情况而优化的代码路径之前浪费时间去弄清楚这种情况;你更愿意直接调用它。
发布于 2014-12-01 20:04:37
当您优化gemv和gemm时,会应用不同的技术:
如果你想知道更多细节,请告诉我。
发布于 2011-08-16 00:38:37
我认为它的1级(向量-向量)、2级(矩阵-向量)和3级(矩阵-矩阵)例程更适合BLAS层次结构。如果你知道它只是一个向量,它可能会优化得更好一些。
https://stackoverflow.com/questions/7067600
复制相似问题