mrkeyoor.com_
Sat 26 Sept 16:11 UTC
Dev Toolsevaluationupdated 26 Sept 2026

fearless_simd review

Fearless SIMD lets Rust programs process several numbers at once without making every caller manage unsafe CPU instructions and feature checks. It provides portable vector types, runtime selection of the best supported instruction set and guarded access to raw intrinsics when the higher-level API is not enough.

Verdict

Our run passed all 24,455 tests in 134 seconds after a 17-second build, which is unusually strong evidence for a new low-level 1.0 crate. Use Fearless SIMD when you need portable Rust SIMD and will inspect generated code on the architectures that matter. Keep benchmarking around dispatch boundaries, especially for small inputs, because correctness coverage does not guarantee that every abstraction lowers to the fastest instruction sequence.

We ran it

Lab card: what happened when we ran fearless_simdScreenshot of fearless_simd (github.com/linebender/fearless_simd)
Install✓ · 6s31 packages
Build✓ · 17s
Tests✓ · 134s24455 passed · 0 failed of 24455 (cargo test)
Repo217 files~164,752 lines of source · 6.6 MB · 1 CI workflows

Answers from our run

Does fearless_simd build from source?

Dependencies installed in 6 seconds (31 packages), and the build succeeded in 17 seconds. We cloned commit 53685f7 into a clean Debian container with 3 CPUs and no project-specific setup.

Do fearless_simd's tests pass?

Yes: 24455 of 24455 passed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use fearless_simd?

Projects pinned below Rust 1.89: that is the documented minimum supported Rust version for 1.0.

What are the alternatives to fearless_simd?

Portable SIMD, pulp, wide. Our run passed all 24,455 tests in 134 seconds after a 17-second build, which is unusually strong evidence for a new low-level 1.

Setup4/56-second fetch and 17-second build; Rust 1.89+ is required
Docs4/5Clear examples and platform caveats; per-operation examples are thin
Community4/5590 stars, same-day push and detailed performance discussions
Maturity4/51.0 API with 24,455 passing tests; released five days ago

Who it’s for

Rust library authors who need one SIMD implementation across x86, Aarch64 and WebAssembly.
Performance engineers who want portable vector types but still need an escape hatch to raw intrinsics.
Teams that value a zero-dependency core crate and can keep the optional procedural macro separate.
no_std developers willing to use the libm feature and handle feature detection limits.

Who it’s NOT for

Projects pinned below Rust 1.89: that is the documented minimum supported Rust version for 1.0.
WebAssembly teams that cannot ship and select separate SIMD and non-SIMD bundles: the package README says WASM has no runtime feature detection.
Binary-size-sensitive x86 applications that cannot accept multiple compiled function versions or tune LTO and codegen units.
Small hot loops that cannot tolerate dispatch overhead without measuring it: issue 194 reports a 20% throughput loss in one 512-byte FFT workload that called dispatch! three times.

Setup reality

Our sandbox install succeeded in 6 seconds and fetched 31 Cargo packages. The build passed in 17 seconds. Tests took 134 seconds, with all 24,455 passing and 0 failing.

The core crate has zero dependencies, while the optional fearless_simd_macros crate supplies #[simd]. Rust 1.89 or newer is required. No credentials or external services are needed for local use.

x86 builds compile several instruction-set versions and select one at runtime, which can increase binary size. WebAssembly requires separate SIMD and scalar bundles. no_std use needs the libm feature because at least one of std or libm must be enabled.

24,455 passing tests make the safety claim credible

SIMD lets one CPU instruction work on several values at once, but using it directly means juggling architecture-specific intrinsics and proving that the current processor supports them. Fearless SIMD puts those concerns behind safe Rust APIs. You can ask the compiler to vectorize a generic function, work with explicit vector types or enter a guarded kernel that exposes raw intrinsics.

The design is useful because it does not trap experienced users at one level. The optional #[simd] attribute handles the common case, dispatch! selects an implementation for the detected CPU and kernel! opens a checked route to NEON or x86 intrinsics. The core fearless_simd crate has zero dependencies; the procedural macro lives in a separately versioned companion crate.

What happened when we ran it

Our sandbox fetched 31 Cargo packages in 6 seconds and built commit 53685f7 in 17 seconds. The complete test command then ran for 134 seconds and reported 24,455 passed with 0 failed. For a low-level crate that promises the same behavior across scalar and vector backends, that result carries more weight than a quick example compiling once.

The checkout was 6.6 MB with 217 files and about 164,752 lines of source. We found 1 CI workflow, no Dockerfile and no conventional tests directory. The missing directory is not missing coverage: tests live in the fearless_simd_tests workspace crate, supported by development macros that generate cases for each SIMD level available on the machine.

Our result establishes that the workspace built and its available tests passed in a fresh 3-CPU, 12 GB Rust container. It does not measure speed, generated assembly or behavior on every supported instruction set. The test machine can only execute levels its hardware and container expose, so adopters still need architecture-specific CI and benchmarks for their shipping targets.

Rust 1.89 and two crates are the entry price

Fearless SIMD 1.0 requires Rust 1.89 or newer. Most users add the zero-dependency core crate and the optional macros crate, then mark SIMD-generic functions with #[simd]. Code can work without that annotation, but the README warns that achieving full performance then requires manual inlining care. That makes the macro the sensible default unless procedural macros are prohibited.

The API covers x86 and x86-64 from SSE2 through SSE4.2, AVX2 and selected AVX-512, plus Aarch64 NEON and 128-bit WebAssembly SIMD. A scalar fallback keeps code functional on machines without a supported SIMD level. Fixed-width vectors are available alongside types that use the native width selected by the backend.

std is enabled by default. A no_std project can select libm for floating-point functions, but one of those 2 features must be present. Runtime detection also changes outside std: the docs point library authors toward fallible detection and a baseline fallback. Embedded users should prototype that path before replacing working scalar code.

WebAssembly requires separate SIMD and scalar bundles

WebAssembly does not provide the runtime feature detection that Fearless SIMD uses on x86. The README tells browser developers to compile one bundle with simd128 and another without it, then select between them with a feature detector. Relaxed SIMD adds another opt-in build choice and can return hardware-dependent results where the crate already permits them.

That packaging cost is easy to miss in a native proof of concept. Cargo cannot set compiler flags per profile, so the documented approach uses a shell script to perform both builds. Teams with strict asset naming, caching or reproducible-build rules need to own that script and test both outputs. A single successful WASM compile is only half the deployment.

x86 dispatch trades binary size for wider CPU support

x86 support compiles versions of a generic function for several instruction sets and chooses one at runtime. This lets one binary use newer instructions without abandoning older CPUs. It also increases binary size. The README suggests codegen-units=1 or link-time optimization as partial remedies, both with longer build times, and offers configuration flags to disable selected automatic dispatch levels.

Performance still needs inspection. Issue 194 reports a 512-byte FFT path losing 20% throughput when dispatch! was called 3 times. Issue 163 discusses vector shifts that look similar in source but can fall back to scalar work on WebAssembly and SSE4.2. These reports do not make the API slow; they show where a convenient abstraction may hide a costly lowering or a badly placed dispatch boundary.

Version 1.0 is active while documentation catches up

Version 1.0.0 was released on September 21, 2026, and the repository was pushed again on September 26. GitHub listed 590 stars and 35 combined issues and pull requests. Current work includes byte compression, generic precise multiply-add implementations and swizzle optimization, all signs that maintainers are checking machine-level output rather than treating 1.0 as finished performance work.

The package README explains the three programming levels, target support, feature flags and deployment caveats well. Open issue 267 says operation tests and usage examples remain scattered, which matches the gap a new user will feel after the introductory examples. Fearless SIMD is ready to try now. The safe API and 24,455-test pass lower correctness risk, while the issue tracker tells you exactly why assembly inspection still belongs in the adoption plan.

Alternatives

ProjectWhat it isPick it when
Portable SIMDThe Rust project's portable vector API that tracks eventual standard-library SIMD.pick this instead when staying close to the `std::simd` design matters more than Fearless SIMD's stable runtime-dispatch layer.
pulpA Rust crate for writing architecture-aware SIMD code with runtime dispatch.pick this instead when its established dispatch model and API fit your kernels better than Fearless SIMD's vector types.
wideA Rust crate of fixed-width SIMD-compatible vector types.pick this instead when simple fixed-width vectors are enough and you do not need Fearless SIMD's multiversion dispatch or intrinsic guards.

What people are saying

  1. [github-trending] linebender/fearless_simd

Sources

  1. Fearless SIMD repository README
  2. Fearless SIMD package guide
  3. Fearless SIMD 1.0.0 release
  4. Dispatch overhead report
  5. Vector shift performance discussion
  6. Documentation test proposal

More dev tools reviews

terminal-browser · devops-exercises · scriptc · 30-seconds-of-code · styleguide · just · the whole board →