Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 如何从SSE中获得最大速度?_Optimization_Assembly_X86_Sse_X87 - Fatal编程技术网

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

Optimization 如何从SSE中获得最大速度?,optimization,assembly,x86,sse,x87,Optimization,Assembly,X86,Sse,X87,什么是像这样的东西最好的设置?哪种取整模式最快?在什么处理器上?启用信令nan是否更快,以便在计算结果为nan时得到通知,还是这会导致非nan计算的速度变慢 总之,如何从紧密的内部SSE循环中获得最大的速度 也欢迎任何相关的x87浮点速度建议。使用Flush to zero,非规范化是零模式:它们旨在以您可能不会注意到的精度成本提高速度 我怀疑不同的取整模式会有不同的成本。从理论上讲,舍入到最近值是最难的,但在硬件实现中,我猜在相同的周期数中进行舍入的附加晶体管可能已经存在,只是没有用于定向舍入

什么是像这样的东西最好的设置?哪种取整模式最快?在什么处理器上?启用信令nan是否更快,以便在计算结果为nan时得到通知,还是这会导致非nan计算的速度变慢

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


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

使用Flush to zero,非规范化是零模式:它们旨在以您可能不会注意到的精度成本提高速度

我怀疑不同的取整模式会有不同的成本。从理论上讲,舍入到最近值是最难的,但在硬件实现中,我猜在相同的周期数中进行舍入的附加晶体管可能已经存在,只是没有用于定向舍入

信令NaN不会减慢非NaN计算


在计算之前只设置一次控制标志字:在计算过程中更改控制标志字将使您节省的成本相形见绌。

如果您的计算可能会遇到非规范化,并且非常小的值的准确性对您的计算不重要,请务必启用FZ和DAZ(一次,在计算开始时;不要过多地触摸MXCSR)。如果计算不涉及非规范值,它们不会产生任何影响,但如果不涉及非规范值,则差异可能非常显著

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


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

谢谢你的建议。FTZ在速度上有很大的不同。不过,非规范化也是一个金科玉律(在我看来,更重要的是)。如果你运气不好,非规范化速度可能慢20-50倍。@Damon“Flush to zero”“非规范值为零”和“非规范值为零”都是与非规范值处理相关的计算模式(刷新到零将作为操作结果的非规范值转换为零,而非规范值为零在应用操作之前将作为操作参数的非规范值转换为零).通常,仅使用其中一个标志就足以避免非规范化的慢路径,我建议两者都不知道OP算法的细节。