klu*_*udg 10 delphi delphi-xe2
我们应该从64位Delphi编译器中的浮点支持中得到什么?
64位编译器是否会使用SSE来实现浮点运算?
64位编译器是否支持当前的80位浮点类型(扩展)?
这些问题密切相关,所以我将它们作为一个问题提出来.
我在这个主题(这里和那里)发了两篇文章,总结一下,是的,64位编译器使用SSE2(双精度),但它没有使用SSE(单精度).一切都转换为双精度浮点数,并使用SSE2计算(编辑:但是有一个选项可以控制)
这意味着,如果双精度浮点数的数学速度很快,则单精度数学运算缓慢(单精度和双精度之间的冗余转换很多),"扩展"别名为"双精度",中间计算精度有限精度加倍.
编辑:有一个未记录的(当时)指令控制SSE代码生成,{$ EXCESSPRECISION OFF}激活SSE代码生成,这会带来预期的性能.
对于 double=扩展位:
阅读 ALLen Bauer 的 Twitter 帐户 Kylix_rd:
事后看来,这是合乎逻辑的,因为虽然 SSE2 寄存器是 128 位,但它们被用作两个 64 位双精度数。