13次发布
0.1.12 | 2021年7月29日 |
---|---|
0.1.11 | 2021年7月23日 |
#585 in 数学
在 2 crate中使用
150KB
2.5K SLoC
guff-matrix
此crate使用SIMD代码实现非常快速的伽罗瓦域矩阵乘法。
先前实现
我之前在PlayStation 3上实现了此算法的一个版本。它在这里可用 这里
SIMD支持
我将实现三种不同的SIMD引擎,以在向量间进行域乘法
-
x86并行长(按位)乘法的实现
-
Arm/Aarch64 NEON实现使用硬件多项式乘法和基于表的模数缩减(vmull/tvbl)
-
Arm NEON的并行长(按位)乘法实现
-
4-way armv6 (Thumb)长乘法例程的实现
支持Arm目标需要夜间构建的Rust构建。
无限带(模拟)
在开始编写特定架构的实现之前,我专注于清楚地记录算法的工作原理。我将实现一个非SIMD版本,该版本使用类似的基本思想,但使用更“锈”的风格(无限迭代器)。它位于 src/arch.rs
,并可作为功能启用
cargo test --features simulator --tests simulator
我还会使用此来证明算法按预期工作。
-
编写和测试非SIMD算法的模拟
-
编写和测试SIMD算法的模拟
矩阵乘法
使用场乘法例程的SIMD版本,我现在有
- x86矩阵乘法的SIMD版本
需要做更多的工作,但经过测试,它比参考版本快3倍左右。有关详细信息,请参阅 benches/vector_mul.rs
。要运行它并启用所有相关优化,可能需要打开一些编译器标志
RUSTFLAGS="-O -C target-cpu=native -C target-feature=+ssse3,+sse4.1,+sse4.2,+avx" cargo bench -q "matrix"
依赖关系
~550KB
~11K SLoC