#simd-vector #vector #simd #portability

nightly no-std packed_simd

可移植打包SIMD向量

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

Download history 12689/week @ 2024-04-06 12556/week @ 2024-04-13 12582/week @ 2024-04-20 8978/week @ 2024-04-27 12896/week @ 2024-05-04 14802/week @ 2024-05-11 10393/week @ 2024-05-18 12608/week @ 2024-05-25 8107/week @ 2024-06-01 1982/week @ 2024-06-08 1496/week @ 2024-06-15 1563/week @ 2024-06-22 1235/week @ 2024-06-29 1363/week @ 2024-07-06 1408/week @ 2024-07-13 945/week @ 2024-07-20

5,178 每月下载量
用于 少于 26 crates

MIT/Apache

580KB
13K SLoC

Simd<[T; N]>

Rust RFC #2366: std::simd 的实现

Latest Version docs

警告:此crate只支持最新的nightly Rust工具链,并将被 #![feature(portable_simd)] 取代。

文档

示例

大多数示例都提供了标量和向量化的实现。

Cargo功能

  • into_bits(默认:禁用):为向量类型启用 FromBits/IntoBits 特性实现。这些允许通过使用 .into_bits() 方法安全地将向量类型的位重新解释为另一个向量类型的位。

性能

以下ISPC示例也是packed_simdexamples/目录的一部分,其中使用了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