你如何从SSE中获得最大速度?

时间:2011-07-30 13:39:39

标签: optimization assembly x86 sse x87

MXCSR等内容的最佳设置是什么?哪种舍入模式最快?什么处理器?启用信号NaN是否更快,以便在计算结果为nan时获得通知,或者这会导致非NaN计算的速度减慢?

总之,如何从紧密内部SSE循环中获得最大速度?

任何相关的x87浮点速度建议也欢迎。

2 个答案:

答案 0 :(得分:6)

使用Flush-to-zero和Denormals-zero模式:它们旨在以您可能不会注意到的精确成本加速。

我怀疑不同的舍入模式有不同的成本。舍入到最近是理论上最难的,但是在硬件实现中,我猜想在相同数量的周期中执行它的额外晶体管可能仍然存在,并且仅用于定向舍入。

信令NaN不会减慢非NaN计算。

在计算之前只设置一次控制标志字:在计算过程中更改它会使你实现的任何节省都相形见绌。

答案 1 :(得分:3)

如果您的计算可能会遇到非正规数,并且非常小的值的准确性对您的计算并不重要,那么一定要打开FZ和DAZ(一次,在计算开始时;不要触摸MXCSR超过必要)。如果你的计算不涉及非正规值,它们将没有任何区别,但如果确实如此,则差异可能非常大。

其他任何MXCSR位都不会对性能产生任何影响。

唯一与x87相关的性能建议是:不要使用x87设备。尽可能在SSE中进行计算。