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 在 硬件支持 中排名
每月下载量 110 次
37KB
579 行
fath
fa(st ma)th
一个专为速度而编写的Rust数学库。
包括整数和浮点数的可配置精度近似函数和精确函数。尽可能使用跨平台内建函数和SIMD。
此库严重依赖不安全和不稳定特性以实现最佳性能。此库的主要用途是在游戏或图形开发中,其中速度比精度更重要。
当在此包中使用SIMD函数时,请使用 lto="fat"
或 lto="thin"
和 opt-level=3
进行编译,以确保进行自动向量化。所有SIMD函数都限制在AVX2,并且此库中没有任何内容使用AVX512。如果某些函数在较低要求下进行向量化,则这是一个额外的好处。
与 sleef-rs 的比较
这里的大多数函数比sleef中的等效函数更快,但牺牲了安全性。
Sleef的 sin_fast
和 cos_fast
比fath的 sin_fast_approx::<3>
稍微不精确。sleef的主要性能损害发生在其范围之外时发生的分支。然而,fath也为它提供了额外的优化。Sleef的 log2_u35
和 ln_u35
函数是其最快的实现,并且比fath更准确,在3.5 ULP之内。Fath的精度较低,但由于额外的优化和较宽松的精度要求,性能更好。
此图表中的“每操作周期”是通过平均每8车道函数迭代的周期数除以8计算的。这模拟了最大吞吐量的最佳情况。
已实现的功能
近似 f32
函数
允许将变量精度级别作为一个const
泛型来设置。
sin
和cos
- 包括范围缩减的封装,但输入值越大,精度会降低。
- 包括没有范围缩减的等效函数
log
(const
底数和变量底数)- 这是基于以2为底数的近似值,并按其他基数进行缩放。其中最快的版本是以2.0为底数的
const
。
- 这是基于以2为底数的近似值,并按其他基数进行缩放。其中最快的版本是以2.0为底数的
精确无符号整数函数
ilog
带有const
底数- 根据底数有多种实现方式以实现最大性能。最快的实现是2为底数的。
exp
带有const
系数- 类似于之前的函数,但计算的是
COEFF^x
。
- 类似于之前的函数,但计算的是
贡献
对库的任何帮助都将受到高度重视。如果您想做出贡献,只需提交一个PR,我会尽快回复。对于开发,建议经常查看生成的汇编代码。对于单个函数的开发,建议使用像Compiler Explorer这样的工具,并经常使用像llvm-mca(在CE下“工具”中可用)这样的工具来了解不同平台上的性能。