.NET中的单精度数学运算?

red*_*alx 6 .net math mathematical-optimization

.NET框架的Math函数主要在双精度浮点数上运行,没有单精度(浮点)重载.在高性能方案中处理单精度数据时,这会导致不必要的转换,并且计算的功能比所需的更精确,因此性能会受到一定程度的影响.

有没有办法避免一些额外的CPU开销?例如,是否有一个带浮点重载的开源数学库,它直接调用底层的FPU指令?(我的理解是这需要CLR的支持).实际上我不确定现代CPU是否只有单精度指令.

这个问题部分受到关于优化sigmoid函数的问题的启发:

C#中的数学优化

Sam*_*ell 3

据我所知,.NET Framework 不包含可直接访问数学内在函数的 API。Mono 库确实包含对内在函数的工作支持,但我不确定它们的状态。

[编辑:本段是对为什么看不到float参数重载的评论。] 一个问题是 CLI 评估堆栈(根据 ECMA-335)不区分 和float类型double。有效的实现可以将所有内容都视为double数学运算,但我想 CLR(微软的 CLI 实现)会尽可能对单精度算术执行优化。

我认为有点不幸的是,内在函数(特别是 SIMD 扩展)的问题尚未在[已发布的产品中]得到解决。我的局外人的猜测是,对内在函数的支持需要对 VM 进行重大更改,这在 .NET Framework 发布周期的此时会带来不可接受的风险。垃圾收集器(我认为异常处理机制)与寄存器分配器紧密耦合,并且支持内在函数向该区域添加了一个全新的变量。