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.0xbinomial_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