|
IBM 的 XL Fortran编译器提供的 matmul 内置函数增加了一个附加选项,如果略去该选项则内置函数采用普通矩阵乘法计算,该方法为 O(N**3)但可靠稳定。如果选了该附加选项,则采用 Winograd variation of the Strassen algorithm,这个算法速度快但在某些情况下会出现不稳定问题。
Intel 的MKL针对其自己的处理器做到了最大程度的优化(最合适的算法?),但对其他处理器是否最优需要试过才知道,没准用的是较慢的算法,毕竟其开发编译器的目的主要是为了销售硬件。
所以对于计算量极大的程序开发,针对问题和采用的硬件研究算法是必要的。当然如果速度不重要则还是采用编译器提供的算法最稳妥,因为编译器追求的第一目标是稳定。 |
|