【发布时间】:2015-04-15 18:38:19
【问题描述】:
C#cannot be coerced into deterministic floating point arithmetic,设计者似乎认为性能开销太大了。
我正在尝试评估是否可以仅使用 SIMD 扩展来实现确定性浮点运算。 SSE appears to be 确定性,within reason。
这有什么不可行的原因吗?
【问题讨论】:
-
仅供参考,您打算用这种浮点精度要求实现什么?
-
我在这里推测,但这可能会在缺少必要的 SIMD 指令的系统上失败吗?您可能会“优雅地”退化为逐元素破坏的数学或彻底失败。
-
@tmyklebu SSE 于 1999 年推出,allegedly“许多科学应用程序拒绝运行,除非 CPU 支持 SSE2 或 SSE3。”。我认为现在很难找到不支持它的 PC。
-
@Mr.Smith:IIRC,SSE2 是 x86_64 上的典型编译器用于实现双精度浮点数学的指令集。它出现在P4上。是的,如果没有 SSE2,很多代码都会崩溃;这部分是因为 SSE2 快得多,部分是因为许多编译器实现的浮点在没有 SSE2 的情况下没有任何语义。我在这里提出了一个相当理论的问题;如果您在 P3 上使用 SIMD 扩展会发生什么?最好的情况是它会爆炸,最坏的情况是它会默默地给你破算术。
-
编写一个在不同系统上得到相同结果的程序,即使这些结果是实数算术结果的近似值,也不是不合理的要求。 Java 结合了 strictfp 和 StrictMath 库,即使以性能为代价也能确保结果的重现性。
标签: c# floating-point deterministic