【问题标题】:Why use MKL's Zgemm when gemm3m is the same but faster?当gemm3m相同但速度更快时,为什么要使用MKL的Zgemm?
【发布时间】:2019-03-07 07:35:45
【问题描述】:

根据MKL的documentation

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

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

如果是这样,为什么不弃用 Zgemm?这里有什么问题?使用 Zgemm 会更好吗? gemm3m 的批处理版本也存在,这意味着它对小型矩阵也很有用。

【问题讨论】:

    标签: linear-algebra blas intel-mkl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      最近在寻找与您相同的答案时发现了这个问题。虽然我不能 100% 确认英特尔在标准 zgemm 实现中使用普通 4 矩阵乘法而不是 3M 版本的推理和决定,但本文:https://dl.acm.org/doi/10.1145/3086466(可在此处以 pdf 形式获得:http://www.cs.utexas.edu/users/flame/pubs/blis6_toms_rev0.pdf)似乎表明3M 方法的数值舍入误差比 4M 版本高,这可能是人们(尤其是那些使用单精度的人)默认使用它的原因。

      【讨论】:

        猜你喜欢
        • 2018-08-02
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        相关资源
        最近更新 更多