当gemm3m相同但速度更快时,为什么要使用MKL的Zgemm?

时间:2018-10-02 07:36:45

标签: linear-algebra blas intel-mkl

根据MKL的documentation

  

?gemm3m例程使用常规方法执行矩阵矩阵操作   复杂矩阵这些例程类似于?gemm例程,   但它们使用的矩阵乘法运算较少。

  

这些例程通过形成   输入矩阵的实部和虚部。这使用了三个实数   矩阵乘法和五个实数矩阵加法,而不是   传统的四个实数矩阵乘法和两个实数矩阵   补充。三个实数矩阵乘法的使用减少了   在矩阵运算上花费的时间减少了25%,   节省了大型矩阵的计算时间。

如果是这种情况,为什么不弃用Zgemm?这里有什么收获?使用Zgemm会更好吗?还存在gemm3m的批处理版本,这意味着它也适用于小型矩阵。

2 个答案:

答案 0 :(得分:2)

最近在寻找与您相同的答案时发现了这个问题。尽管我无法100%确认Intel在标准zgemm实现中使用3M版本上的普通4矩阵乘法的推理和决定,但本文似乎是:https://dl.acm.org/doi/10.1145/3086466(可在pdf中找到:http://www.cs.utexas.edu/users/flame/pubs/blis6_toms_rev0.pdf)表明3M方法比4M版本具有更高的数值舍入误差,这可能就是为什么人们(尤其是使用单精度的人们)在默认情况下会谨慎使用的原因。

答案 1 :(得分:0)

因为第二个它执行具有复杂值的运算。使用实数值进行运算时,只需将其乘以一个即可。当您对复杂值进行运算时,您需要进行4个矩阵乘法。此方法对将矩阵乘法的次数从4个减少到3个的方法进行了改进。当您输入其真值时,日常gemm便会发挥其最佳选择。