rust-lang/portable-simd
rust-lang/portable-simd has 1,079 GitHub stars and 110 forks. Star changes are not measured yet. Last checked 2026-11-09 10:34 UTC. Last push 2026-11-02.
The testing ground for the future of portable SIMD in Rust
Measured star growth
- in 24h
- Update delayed
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalThe Rust standard library's portable SIMD API
Code repository for the Portable SIMD Project Group. Please refer to CONTRIBUTING.md for our contributing guidelines.
The docs for this crate are published from the main branch. You can read them here.
If you have questions about SIMD, we have begun writing a guide. We can also be found on Zulip.
If you are interested in support for a specific architecture, you may want stdarch instead.
Hello World
Now we're gonna dip our toes into this world with a small SIMD "Hello, World!" example. Make sure your compiler is up to date and using nightly. We can do that by running
rustup update -- nightly
or by setting up rustup default nightly or else with cargo +nightly {build,test,run}. After updating, run
cargo new hellosimd
to create a new crate. Finally write this in src/main.rs:
#![feature(portable_simd)]
use std::simd::f32x4;
fn main() {
let a = f32x4::splat(10.0);
let b = f32x4::from_array([1.0, 2.0, 3.0, 4.0]);
println!("{:?}", a + b);
}
Explanation: We construct our SIMD vectors with methods like splat or from_array. Next, we can use operators like + on them, and the appropriate SIMD instructions will be carried out. When we run cargo run you should get [11.0, 12.0, 13.0, 14.0].
Supported vectors
Currently, vectors may have up to 64 elements, but aliases are provided only up to 512-bit vectors.
Depending on the size of the primitive type, the number of lanes the vector will have varies. For example, 128-bit vectors have four f32 lanes and two f64 lanes.
The supported element types are as follows:
- Floating Point:
f32,f64 - Signed Integers:
i8,i16,i32,i64,isize(i128excluded) - Unsigned Integers:
u8,u16,u32,u64,usize(u128excluded) - Pointers:
*const Tand*mut T(zero-sized metadata only) - Masks: 8-bit, 16-bit, 32-bit, 64-bit, and
usize-sized masks
Floating point, signed integers, unsigned integers, and pointers are the primitive types you're already used to.
The mask types have elements that are "truthy" values, like bool, but have an unspecified layout because different architectures prefer different layouts for mask types.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,611 starspublic-apis/public-apis
A collective list of free APIs
497,932 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
449,912 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,301 stars