.net - OpenTK 的 Vector2.Length 是 Vector2.LengthFast 的两倍

标签 .net xamarin.ios opentk sqrt

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 msLengthFast :4754 ms
在带有 MonoTouch 的 iPad 3 上,我得到:
Length :51575 msLengthFast :41252 ms
所以,LengthFast在 Intel CPU 上速度要慢得多,在 iPad 的 ARM 上它稍微快一点。

对此有什么解释吗? 这是英特尔 CPU 能够“本地”计算平方根(不使用软件近似)的结果吗?不应该LengthFast总是更快,至少快一点?

最佳答案

全部 Math成员(member)真的很快。不要试图加速 .NET 数学代码。在 ARM 处理器上它可能更快,因为在 ARM 处理器上执行相同的实现需要一些缺少的 X86/X86_64 命令,因此代码不同。

关于.net - OpenTK 的 Vector2.Length 是 Vector2.LengthFast 的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424546/

相关文章:

.net - 依赖注入(inject)的通用接口(interface)

jquery - POST Json 到 Razor 页面

ios - 单色触摸 : "Missing a required architecture armv7"

OpenGL zNear zFar 是什么意思?

c# - 将 ImageSharp.Image 转换为 ImageSharp.PixelFormats.Rgba32?

java - .NET 中 Guava 服务的替代方案?

c# - 动态表名

c# - PCL 中缺少方法

iPhone:UIImageView 淡入 - 如何?