17 个版本
新版本 0.2.14 | 2024 年 8 月 19 日 |
---|---|
0.2.13 | 2024 年 8 月 19 日 |
0.2.11 | 2024 年 7 月 31 日 |
0.1.1 | 2024 年 7 月 10 日 |
#207 in 数学
835 每月下载量
用于 5 个 crates (2 直接)
460KB
12K SLoC
用于 NEON、SSE、AVX 和标量实现的数学工具
包含标量实现、NEON simd 和 SSE 以及 AVX 的基本数学例程。所有实现均使用单精度和双精度。几乎所有例程的 ULP 都小于 1.5,这对于媒体处理应用来说是绝对足够的(对于某些媒体应用可能过高)。所有方法对于通用用途都足够快。性能与 libm 相当,有时更快,有时更慢,但可能不如 CPU 集成解决方案。添加了 NEON(双精度、双精度)类型,以及 uint128。为 SSE 添加了 64 位整数算术。
实现的例程
- abs
- acos
- asin
- atan
- atan2
- cbrt
- floor
- exp
- fmod
- ln
- hypot
- pow
- sin
- cos
- tan
- sqrt
- ceil
- hypot3
- hypot4
示例
let value = 0.1f32.esin();
// For NEON simd
let value = vsinq_f32(vdupq_n_f32(0.1f32));
与 libm 的性能比较
艾尔达诺斯正弦时间:[17.785 ns 17.884 ns 18.095 ns]
libm 正弦时间:[27.928 ns 28.595 ns 29.398 ns]
艾尔达诺斯正切时间:[27.593 ns 27.607 ns 27.621 ns]
libm 正切时间:[28.854 ns 29.165 ns 29.467 ns]
艾尔达诺斯立方根时间:[23.260 ns 23.452 ns 23.650 ns]
艾尔达诺斯立方根时间:[23.260 ns 23.452 ns 23.650 ns]
艾尔达诺斯幂时间:[66.930 ns 67.465 ns 68.025 ns]
libm 幂时间:[170.74 ns 172.71 ns 174.67 ns]
艾尔达诺斯反正弦时间:[23.730 ns 23.953 ns 24.156 ns]
libm 反正弦时间:[349.02 ns 350.39 ns 352.24 ns]
艾尔达诺斯反正切时间:[20.882 ns 21.115 ns 21.347 ns]
libm 反正切时间:[20.128 ns 20.309 ns 20.494 ns]