Simd<[T; N]>

Implementation of Rust RFC #2366: std::simd

![Latest Version] ![docs]

WARNING: this crate only supports the most recent nightly Rust toolchain and will be superseded by #![feature(portable_simd)].

Documentation

Examples

Most of the examples come with both a scalar and a vectorized implementation.

Cargo features

Performance

The following [ISPC] examples are also part of packed_simd's examples/ directory, where packed_simd+rayon are used to emulate [ISPC]'s Single-Program-Multiple-Data (SPMD) programming model. The performance results on different hardware is shown in the readme.md of each example. The following table summarizes the performance ranges, where + means speed-up and - slowdown:

Platform support

The following table describes the supported platforms: build shows whether the library compiles without issues for a given target, while run shows whether the test suite passes for a given target.

| 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 | ✗ | ✗ |

Machine code verification

The verify/ crate tests disassembles the portable packed vector APIs at run-time and compares the generated machine code against the desired one to make sure that this crate remains efficient.

License

This project is licensed under either of

at your option.

Contributing

We welcome all people who want to contribute. Please see the [contributing instructions] for more information.

Contributions in any form (issues, pull requests, etc.) to this project must adhere to Rust's [Code of Conduct].

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in packed_simd by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.