The std::simd module provides a safe, portable API for SIMD. Together with the multiversion crate it allows for SIMD that works from a single source file on every platform, and entirely in safe code!
The drawback is that it is nightly-only, and still technically unstable despite not having changed in quite some time. It would be great to add support for it and expose this as an opt-in feature, e.g. nightly-portable-simd. This would let your crate support SIMD on a lot more platforms (Aarch64, WASM, etc) and allow people on nightly channel to use a fast implementation without unsafe code.
Adding support for std::simd has been on my todo list for some time, too.
I've create a WIP branch and pull request (#13) which only contains an optimized RGB to YCbCr function yet.
The
std::simd
module provides a safe, portable API for SIMD. Together with themultiversion
crate it allows for SIMD that works from a single source file on every platform, and entirely in safe code!The drawback is that it is nightly-only, and still technically unstable despite not having changed in quite some time. It would be great to add support for it and expose this as an opt-in feature, e.g.
nightly-portable-simd
. This would let your crate support SIMD on a lot more platforms (Aarch64, WASM, etc) and allow people on nightly channel to use a fast implementation without unsafe code.