20 个版本
0.6.1 | 2024年7月5日 |
---|---|
0.5.2 | 2020年10月7日 |
0.5.1 | 2020年8月31日 |
0.5.0 | 2020年4月11日 |
0.1.6 | 2017年9月22日 |
#344 在 数据结构
909 每月下载量
在 13 个 crate(3 个直接) 中使用
59KB
1.5K SLoC
numeric-array
numeric-array
是一个封装了 generic-array
的包装器,它增加了高效数值特质的实现,旨在鼓励 LLVM 自动将表达式转换为 SIMD 指令并在编译时进行评估。
为 NumericArray
本身实现了所有稳定的 core::ops
特质,以及必要的薄 NumericConstant
类型,以区分常量值和 NumericArray
本身。
此外,还实现了大多数 num_traits
,包括 Num
本身。因此,您甚至可以将整个数组用作泛型数字。
示例
use num_traits::Float;
use numeric_array::{NumericArray, narr};
fn main() {
let a = narr![f32; 1, 2, 3, 4];
let b = narr![f32; 5, 6, 7, 8];
let c = narr![f32; 9, 1, 2, 3];
// Compiles to a single vfmadd213ps instruction on my machine
let d = a.mul_add(b, c);
assert_eq!(d, narr![f32; 14, 13, 23, 35]);
}
当与 RUSTFLAGS = "-C opt-level=3 -C target-cpu=native"
一起使用时,Rust 和 LLVM 足够聪明,可以将几乎所有操作自动转换为 SIMD 指令,或者甚至仅在编译时进行评估。上面的示例实际上是在编译时进行评估的,所以如果您查看汇编代码,它只会显示结果。
这对于需要数组简单分片操作的场合非常理想。
依赖项
~320–580KB
~13K SLoC