#simd #approximation #performance #no-std #math #game

nightly no-std fath

专为速度而构建的数学库。包括可配置精度的近似函数和整数及浮点数的精确函数。尽可能使用跨平台内建函数和SIMD。

10个版本

0.2.1 2023年6月2日
0.2.0 2023年5月9日
0.1.9 2023年5月9日
0.1.6 2023年4月30日

1080硬件支持 中排名

Download history 4/week @ 2024-03-11 75/week @ 2024-04-01

每月下载量 110

LGPL-3.0

37KB
579

fath crates.io

fa(st ma)th

一个专为速度而编写的Rust数学库。

包括整数和浮点数的可配置精度近似函数和精确函数。尽可能使用跨平台内建函数和SIMD。


此库严重依赖不安全和不稳定特性以实现最佳性能。此库的主要用途是在游戏或图形开发中,其中速度比精度更重要。

当在此包中使用SIMD函数时,请使用 lto="fat"lto="thin"opt-level=3 进行编译,以确保进行自动向量化。所有SIMD函数都限制在AVX2,并且此库中没有任何内容使用AVX512。如果某些函数在较低要求下进行向量化,则这是一个额外的好处。

sleef-rs 的比较

这里的大多数函数比sleef中的等效函数更快,但牺牲了安全性。

Sleef的 sin_fastcos_fast 比fath的 sin_fast_approx::<3> 稍微不精确。sleef的主要性能损害发生在其范围之外时发生的分支。然而,fath也为它提供了额外的优化。Sleef的 log2_u35ln_u35 函数是其最快的实现,并且比fath更准确,在3.5 ULP之内。Fath的精度较低,但由于额外的优化和较宽松的精度要求,性能更好。

此图表中的“每操作周期”是通过平均每8车道函数迭代的周期数除以8计算的。这模拟了最大吞吐量的最佳情况。

Benchmarks (Ryzen 5 5600x, lto= fat , opt-level=3, target-cpu=native)

已实现的功能

近似 f32 函数

允许将变量精度级别作为一个const泛型来设置。

  • sincos
    • 包括范围缩减的封装,但输入值越大,精度会降低。
    • 包括没有范围缩减的等效函数
  • logconst底数和变量底数)
    • 这是基于以2为底数的近似值,并按其他基数进行缩放。其中最快的版本是以2.0为底数的const

精确无符号整数函数

  • ilog带有const底数
    • 根据底数有多种实现方式以实现最大性能。最快的实现是2为底数的。
  • exp带有const系数
    • 类似于之前的函数,但计算的是COEFF^x

贡献

对库的任何帮助都将受到高度重视。如果您想做出贡献,只需提交一个PR,我会尽快回复。对于开发,建议经常查看生成的汇编代码。对于单个函数的开发,建议使用像Compiler Explorer这样的工具,并经常使用像llvm-mca(在CE下“工具”中可用)这样的工具来了解不同平台上的性能。

没有运行时依赖