2

我在 CFD 求解器中使用 IEEE 严格的浮点运算。我的算法是明确且确定的(它将在每个时间步执行完全相同数量的计算)。然而我观察到,在解决方案......复杂的时期(在整个网格中发生了很多事情),求解器“陷入困境”并且速度变慢。

我对 FP 算术非常不友好,因此假设 FP 算术在其计算时间上是确定性的。现在我开始怀疑给定 FP 计算所需的实际 CPU 操作的数量是否取决于这些值(例如,乘法或除法的指数差异很大)。

IEEE 严格的浮点性能能否取决于值?

4

1 回答 1

1

虽然可以设计浮点硬件,使其任何特定操作的执行速度都与操作数的值无关,但通常有利于最小化平均情况时间,特别是如果可以在不影响最坏情况的情况下做到这一点-案例时间。例如,即使芯片通常需要六个周期来执行双精度浮点乘法,但如果在芯片开始乘法过程的同时,一个单独的电路执行以下操作,则可以提高许多应用中的性能:

Set R1 if first operand is NaN or second operand is +/- 1.0
Set R2 if second operand is NaN or first operand is +/- 1.0
Set Z if either operand is +/- 0.0
Set N if either operand is NaN
If (R1 or R2 or Z)
  Set the body of the result, excluding sign, to the (first-op & R1) | (second-op & R2)
  Set the sign of the result to (first-op & (R1 | !N)) ^ (second-op & (R2 | !N))
  Skip the rest of the multiplication

添加上述逻辑将导致浮点乘法 +/- 1.0 或 +/- 0.0 在不涉及此类常量的乘法所需时间的六分之一内执行。在许多情况下,代码可以接受任意比例因子,但最常使用的比例因子为零或一;例如,某些图形应用程序可能允许任意缩放、旋转和剪切,但最常使用比例因子为 1、无旋转和无剪切。尽管需要的硬件比将大多数乘法提高一个周期所需的硬件少,但加速乘法 0 和 1 可以在许多情况下提供更有用的性能提升。

于 2014-07-30T16:10:19.517 回答