有谁知道.net处理器的硬件实现了什么数学方法?例如,我有一个算法,大量使用atan。我可以轻松地为此编写一个查找表,但是如果math.net使用fpu或其他硬件扩展来实现它,那么它就不值得了。
答案 0 :(得分:2)
为什么不直接针对.net提供的atan()对您的查找表方法进行基准测试。然后,您将能够清楚地了解使用查找表确实有多大的速度差异。
有了这个,你就不需要知道底层虚拟机是如何做的,以便找出最快的方法。你甚至可以量化加速。
答案 1 :(得分:1)
根据这篇博客,微软的JIT编译器 利用x86平台上的FPU指令:
http://blogs.msdn.com/davidnotario/archive/2004/10/26/247792.aspx
这是一个非常基本的事情,因为FPU已经在x86 CPU上标准化已有十多年了。
答案 2 :(得分:1)
这些方法是否使用x87硬件指令实现不是问题,因为硬件超越功能指令很慢。
“Intel 64和IA-32架构优化参考手册”(下载here)列出fpatan
在最近的硬件上具有150-300个周期的延迟。一个编写良好的软件实现可以在极短的时间内提供完全准确的双精度结果 - 事实上,高质量的数学库就是这样做的。
答案 3 :(得分:0)
使用小型基准测试应用程序,似乎即使使用fpu,Math.Atan2的性能也不如替代近似函数那么好。
在我的简单基准测试中,Math.Atan2循环需要8秒,而近似版本需要5.5秒。