64位编译器中的浮点支持

klu*_*udg 10 delphi delphi-xe2

我们应该从64位Delphi编译器中的浮点支持中得到什么?

  • 64位编译器是否会使用SSE来实现浮点运算?

  • 64位编译器是否支持当前的80位浮点类型(扩展)?

这些问题密切相关,所以我将它们作为一个问题提出来.

Eri*_*nge 5

我在这个主题(这里那里)发了两篇文章,总结一下,是的,64位编译器使用SSE2(双精度),但它没有使用SSE(单精度).一切都转换为双精度浮点数,并使用SSE2计算(编辑:但是有一个选项可以控制)

这意味着,如果双精度浮点数的数学速度很快,则单精度数学运算缓慢(单精度和双精度之间的冗余转换很多),"扩展"别名为"双精度",中间计算精度有限精度加倍.

编辑:有一个未记录的(当时)指令控制SSE代码生成,{$ EXCESSPRECISION OFF}激活SSE代码生成,这会带来预期的性能.


Mar*_*ort 1

对于 double=扩展位:

阅读 ALLen Bauer 的 Twitter 帐户 Kylix_rd:

http://twitter.com/kylix_rd

事后看来,这是合乎逻辑的,因为虽然 SSE2 寄存器是 128 位,但它们被用作两个 64 位双精度数。