我测试了BLAS sdot
接口的单精度浮点运算。我发现"英特尔MKL"库的结果与中给出的BLAS-fortran代码的结果有点不同http://netlib.org/blas/.MKL看起来更准确。
我只是想知道MKL是否进行了任何优化?或者MKL如何实现它以使其更准确?
好吧,由于MKL是由特定的CPU供应商专门为自己的产品编写的,我想他们可以使用比参考实现更多的关于底层机器的知识。
最初的想法可能是,他们使用优化的汇编,并始终保持x87 80位浮点堆栈上的运行总和,而不会在每次迭代中将其四舍五入到32位。或者,他们使用SSE(2),以双倍精度计算整个和(从性能上讲,这对加法和乘法来说应该没有太大区别)。或者他们使用了一种完全不同的计算方法,或者使用了黑色魔法机器的把戏。
关键是,这些例程对于特定硬件的优化程度远高于基本的参考实现,但如果没有看到它们的实现,我们就不能说是哪种方式。上述想法只是简单的方法。