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

Fee*_*ure 5 optimization x86 assembly sse x87

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

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

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

Pas*_*uoq 6

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

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

信令NaN不会减慢非NaN计算的速度.

在计算之前只设置一次控制标志字:在计算期间更改它将使您实现的任何节省相形见绌.

  • @Damon"Flush-to-zero"和"denormals-are-zero"都是与非正规处理相关的计算模式(flush-to-zero将一个非正规转换为操作的**结果**为零,而denormals-are-zero在应用操作之前将操作的**参数**的非正规转换为零).使用这些标志中的一个通常足以避免非正常的慢速路径,我建议两者都不知道OP算法的细节. (3认同)