8个版本
0.3.9 | 2023年7月30日 |
---|---|
0.3.8 | 2023年4月16日 |
0.3.3 | 2019年2月5日 |
0.3.2 | 2019年1月31日 |
0.1.0 | 2018年7月26日 |
10 在 #portability
5,178 每月下载量
用于 少于 26 crates
580KB
13K SLoC
Simd<[T; N]>
Rust RFC #2366: std::simd
的实现
警告:此crate只支持最新的nightly Rust工具链,并将被 #![feature(portable_simd)]
取代。
文档
- API文档(
master
分支) - 性能指南
- API文档(
docs.rs
) - RFC2366
std::simd
:包含动机、设计原理、讨论等。
示例
大多数示例都提供了标量和向量化的实现。
Cargo功能
into_bits
(默认:禁用):为向量类型启用FromBits
/IntoBits
特性实现。这些允许通过使用.into_bits()
方法安全地将向量类型的位重新解释为另一个向量类型的位。
性能
以下ISPC示例也是packed_simd
的examples/
目录的一部分,其中使用了packed_simd
+rayon
来模拟ISPC的单程序多数据(SPMD)编程模型。不同硬件上的性能结果显示在每个示例的readme.md
中。下表总结了性能范围,其中+
表示加速,-
表示减速。
aobench
:[-1.02x, +1.53x]
,stencil
:[+1.06x, +1.72x]
,mandelbrot
:[-1.74x, +1.2x]
,期权定价
:black_scholes
:+1.0x
binomial_put
:+1.4x
尽管SPMD不是packed_simd
的预期用途,但可以将库与rayon
结合,在Rust中拙劣地模拟ISPC的SPMD编程模型。编写性能代码并不像在ISPC中那样简单,但通过一些注意(例如,参见性能指南),可以轻松匹配,并且通常优于ISPC的“默认性能”。
平台支持
以下表格描述了支持的平台:build
显示库是否针对给定目标无问题地编译,而run
显示测试套件是否针对给定目标通过。
Linux | build | run |
---|---|---|
i586-unknown-linux-gnu |
✓ | ✗ |
i686-unknown-linux-gnu |
✓ | ✗ |
x86_64-unknown-linux-gnu |
✓ | ✓ |
arm-unknown-linux-gnueabihf |
✓ | ✓ |
armv7-unknown-linux-gnueabi |
✓ | ✓ |
aarch64-unknown-linux-gnu |
✓ | ✓ |
powerpc-unknown-linux-gnu |
✓ | ✗ |
powerpc64-unknown-linux-gnu |
✓ | ✗ |
powerpc64le-unknown-linux-gnu |
✓ | ✓ |
s390x-unknown-linux-gnu |
✓ | ✗ |
sparc64-unknown-linux-gnu |
✓ | ✗ |
thumbv7neon-unknown-linux-gnueabihf |
✓ | ✓ |
MacOSX | build | run |
x86_64-apple-darwin |
✓ | ✓ |
Android | build | run |
x86_64-linux-android |
✓ | ✓ |
armv7-linux-androideabi |
✓ | ✗ |
aarch64-linux-android |
✓ | ✗ |
thumbv7neon-linux-androideabi |
✓ | ✗ |
iOS | build | run |
x86_64-apple-ios |
✗ | ✗ |
aarch64-apple-ios |
✗ | ✗ |
机器码验证
verify/
crate测试在运行时反汇编可移植打包向量API,并将生成的机器码与所需的代码进行比较,以确保此crate保持高效。
许可证
此项目受以下任一许可证的许可:
根据您的选择。
贡献
我们欢迎所有希望贡献的人。请参阅贡献指南以获取更多信息。
对此项目的任何形式(问题、pull 请求等)的贡献必须遵守 Rust 的行为准则。
除非您明确表示,否则您提交给 packed_simd
的任何贡献(如 Apache-2.0 许可证中定义的),将根据上述条款双许可,不附加任何额外条款或条件。
依赖项
~0.5–2.3MB
~37K SLoC