这些OpenTK
库,以及 MonoTouch 和 MonoDroid,包含方法LengthFast
,它应该在不使用的情况下计算向量长度的近似值Math.Sqrt
(这似乎被称为慢)。LengthFast
使用MathHelper.InverseSqrtFast
,一个非常有趣的方法,它应该给出平方根的快速近似值(参见http://www.opentk.com/files/doc/_math_helper_8cs_source.html的第 172 和 196 行)。
我创建了一个小基准,它调用两个计算100'000'000
时间,向量长度在 1 到 100 之间。
在 Windows 7 / Intel i7-2600 3.40 GHz 上,我得到:
Length
:2947 ms
LengthFast
:4754 ms
在带有 MonoTouch 的 iPad 3 上,我得到:
Length
:51575 ms
LengthFast
:41252 ms
因此,LengthFast
在 Intel CPU 上要慢得多,在 iPad 的 ARM 上要快一些。
对此有何解释?这是英特尔 CPU 能够“本机”计算平方根(不使用软件近似)的结果吗?不LengthFast
应该总是更快,至少一点点?