The state of SIMD in Rust in 2026

(shnatsel.github.io)

43 points | by verdagon 2 days ago

2 comments

  • Archit3ch 1 hour ago
    Hot take: there is no portable SIMD.

    You can either have performance (=write manual ASM for each platform), or portability, but not both.

    What so-called "portable SIMD" libraries give you is "portable auto-vectorization". "Portable performance" is a global property of the algorithm. Relying on auto-vectorization will result in e.g. sub-optimal register spills in practice. The microbenchmarks will look great, though. ;)

    • Sharlin 44 minutes ago
      Getting 2x or 4x performance in your inner loops using a reasonable SIMD library is infinitely better than theoretically getting 8x performance with hand-coded nonportable intrinsics, because the latter is never going to happen in most programs, so the actual point of comparison is scalar code, or autovectorized code at best.
    • IshKebab 28 minutes ago
      It's a continuum. Some things basically all SIMD implementations support. Want to add 2 4xf32 vectors together? That's pretty easy to do portably.

      But yeah to be fair if you are at that point, you probably want to go fully non-portable anyway. Especially with AI.

      Has anyone even figured out how to do vector stuff (SVE/RVV) without assembly?

    • louthy 50 minutes ago
      > there is no portable SIMD

      Except in languages with a JIT compiler

      • Tanjreeve 40 minutes ago
        Starts to get a bit philosophical on what constitutes "portable" but JIT compilers would emit an opcode based off of whatever the frontend/IR is saying to do surely?
    • Scene_Cast2 48 minutes ago
      What about numpy, numba, and torch.compile?
      • izacus 17 minutes ago
        Those are manually optimized per arch, aren't they?
  • justmeeew 1 hour ago
    [flagged]