我有一些非常优化的代码(信号处理)在使用Mono,跨平台的C#中完美运行。然而,某些情况会导致指数衰减的数字,这些数字本质上注定会在某些时候变得不正常。
由于这有效地将应用程序的性能降低了几个数量级,我想摆脱它们。但是,在可能发生的任何地方检查非正规都会导致类似的性能问题。
我知道x87 FPU和SSE FPU都支持DAZ操作(denormals-are-zero / flush denormals为零),它可以解决所有问题,但这些控制字无法通过C#访问。
我需要一些适用于跨平台的东西,以及x87 fpu和daz。我有什么选择?我可以调用/调用来控制fpu字吗?我知道运行时并不期望控制字发生变化,但是我会在需要它的小时间后重新调整字。
是的:我不会说这是重复的;它需要更多的研究。另一方面的答案说这是不可能的,并且在下一行中说它可以通过p / invoking完成。显然它会在异常时重置,但由于我打算每次需要该功能时设置它(无论如何你应该总是做),这似乎是可能的。有人有成功吗?我似乎也无法在OSX的某些模块中找到_control_fp,p /调用工作是否相同?