Math BLAS sdot操作在MKL库中的实现

Math BLAS sdot操作在MKL库中的实现,math,numeric,blas,Math,Numeric,Blas,我测试了BLASsdot接口的单精度浮点点操作。我发现英特尔MKL库的结果与中给出的BLAS fortran代码的结果略有不同。MKL的看起来更准确 我只是想知道MKL是否进行了任何优化?或者MKL是如何实现的以使其更加准确?好吧,因为MKL是由特定的CPU供应商专门为他们自己的产品编写的,我想他们可以使用比参考实现更多的关于底层机器的知识 第一个想法可能是,他们使用优化的汇编,并始终保持x87 80位浮点堆栈上的运行和,而不在每次迭代中将其舍入到32位。或者他们可能使用SSE(2)并以双精度计

我测试了BLAS
sdot
接口的单精度浮点点操作。我发现英特尔MKL库的结果与中给出的BLAS fortran代码的结果略有不同。MKL的看起来更准确


我只是想知道MKL是否进行了任何优化?或者MKL是如何实现的以使其更加准确?

好吧,因为MKL是由特定的CPU供应商专门为他们自己的产品编写的,我想他们可以使用比参考实现更多的关于底层机器的知识

第一个想法可能是,他们使用优化的汇编,并始终保持x87 80位浮点堆栈上的运行和,而不在每次迭代中将其舍入到32位。或者他们可能使用SSE(2)并以双精度计算整个总和(从性能上看,这对加法和乘法不会有太大影响)。或者他们使用了一种完全不同的计算方法,或者是什么黑魔法机器的把戏


关键是,这些例程对于特定硬件的优化程度远远高于基本参考实现,但如果没有看到它们的实现,我们就无法确定它们的实现方式。上面提到的想法只是简单的方法。

好吧,因为MKL是由特定的CPU供应商专门为他们自己的产品编写的,我想他们可以使用比参考实现更多的关于底层机器的知识

第一个想法可能是,他们使用优化的汇编,并始终保持x87 80位浮点堆栈上的运行和,而不在每次迭代中将其舍入到32位。或者他们可能使用SSE(2)并以双精度计算整个总和(从性能上看,这对加法和乘法不会有太大影响)。或者他们使用了一种完全不同的计算方法,或者是什么黑魔法机器的把戏


关键是,这些例程对于特定硬件的优化程度远远高于基本参考实现,但如果没有看到它们的实现,我们就无法确定它们的实现方式。上述想法只是简单的方法。

您能解释一下,对于
sdot
,您是如何确定MKL比参考fortran BLAS更精确的吗?我在bicgstab解算器中使用了这两个
sdot
,结果是MKL one收敛得更快。您能解释一下,对于
sdot
,您是如何确定MKL比参考fortran BLAS更精确的吗?我在bicgstab解算器中使用了这两个
sdot
,事实证明,MKL one的收敛速度更快。我猜想,带有向量寄存器的SSE2实现可以使用“树状”缩减算法中的融合FMAD操作执行点积。与单个标量求和相比,它应该会有很多累加和中间舍入误差。非常感谢您的回答!我想英特尔的人一定在他们的平台上做了很多优化。非常感谢。我猜想,带有向量寄存器的SSE2实现可以使用“树状”缩减算法中的融合FMAD操作执行点积。与单个标量求和相比,它应该会有很多累加和中间舍入误差。非常感谢您的回答!我想英特尔的人一定在他们的平台上做了很多优化。非常感谢。