1

有谁知道.net处理器的硬件实现了哪些数学方法?例如,我有一个算法大量使用了 atan。我可以很容易地为此编写一个查找表,但如果 math.net 使用 fpu 或其他硬件扩展来实现它,那将不值得。

4

4 回答 4

2

为什么不将您的查找表方法与 .net 提供的 atan() 进行基准测试。然后,您将能够清楚地知道使用查找表真正造成的速度差异有多大。

有了这个,你就不需要知道底层虚拟机是如何做事的,就可以确定最快的方法。您甚至可以量化加速。

于 2009-12-16T09:10:58.470 回答
1

根据这篇博客,微软的 JIT 编译器确实利用了 x86 平台上的 FPU 指令:

http://blogs.msdn.com/davidnotario/archive/2004/10/26/247792.aspx

这是一件非常初级的事情,因为十多年来,FPU 一直是 x86 CPU 的标准配置。

于 2009-12-16T09:20:59.110 回答
1

这些方法是否使用 x87 硬件指令实现都不是问题,因为硬件超越函数指令很慢。

“英特尔 64 和 IA-32 架构优化参考手册”(在此处下载)列出fpatan了在最近的硬件上具有 150-300 个周期的延迟。一个编写良好的软件实现可以在更短的时间内提供完全准确的双精度结果——事实上,高质量的数学库就是这样做的。

于 2009-12-16T21:45:35.117 回答
0

使用小型基准测试应用程序,似乎即使使用 fpu,Math.Atan2 的性能也不如替代逼近函数。

在我的简单基准测试中,Math.Atan2 循环需要 8 秒,而近似版本需要 5.5 秒。

于 2009-12-16T13:44:02.383 回答