che*_*ica 5 .net sqrt xamarin.ios opentk
这些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
在英特尔CPU上慢得多,在iPad的ARM上它稍快一些.
对此有何解释?这是因为英特尔CPU能够"本地"计算平方根(不使用软件近似值)吗?不LengthFast
应该总是更快,至少一点点?
所有Math
成员都非常快。不要尝试加速 .NET 数学代码。在 ARM 处理器上,它可能会更快,因为缺少一些在 ARM 处理器上实现相同实现所需的 X86/X86_64 命令,因此代码不同。
归档时间: |
|
查看次数: |
415 次 |
最近记录: |