Rust SIMD on the GPU VectorWare, a GPU-native software company, announced it can now use Rust's portable SIMD (core::simd) on the GPU, mapping a Simd vector directly to a warp's 32 lanes. This milestone, a world first, completes the parallelism hierarchy by treating the GPU as vector hardware, enabling developers to write high-performance GPU applications using familiar Rust abstractions without needing std support. VectorWare / GPU code can now use Rust's portable SIMD. We share the implementation approach and what this unlocks for GPU programming. At VectorWare / , we are building the first GPU-native software company /blog/announcing-vectorware/ . Today, we are excited to announce that we can successfully use Rust's portable SIMD core::simd https://doc.rust-lang.org/core/simd/index.html on the GPU. This milestone marks a significant step towards our vision of enabling developers to write complex, high-performance applications that leverage the full power of GPU hardware using familiar Rust abstractions. Parallelism below the thread When we brought Rust threads to the GPU /blog/threads-on-gpu/ , we mapped each std::thread https://doc.rust-lang.org/std/thread/ to a GPU warp https://modal.com/gpu-glossary/device-software/warp . This let us run many concurrent threads on the GPU but did not use the parallel lanes https://docs.nvidia.com/cuda/cuda-programming-guide/01-introduction/programming-model.html warps-and-simt within each thread/warp. On the CPU, the abstraction for parallelism within a thread is SIMD https://en.wikipedia.org/wiki/Single instruction, multiple data . A single instruction operates on several data elements packed into a vector unit: where scalar code adds two numbers, a SIMD add takes two vectors of, say, eight f32 values and produces eight sums at once. This data parallelism is inside a single thread, below the level where the operating system schedules anything. Rust's portable SIMD Historically, writing SIMD in Rust meant reaching for the architecture-specific vendor intrinsics in core::arch https://doc.rust-lang.org/core/arch/index.html , such as on x86-64 or https://doc.rust-lang.org/beta/core/arch/x86 64/fn. mm256 add ps.html mm256 add ps on Arm. These intrinsics are specific to a single instruction set, so a program that runs on more than one architecture needs a separate implementation for each. https://doc.rust-lang.org/beta/core/arch/arm/fn.vaddq f32.html vaddq f32 Rust's portable SIMD https://doc.rust-lang.org/core/simd/index.html instead adds a layer of abstraction above these intrinsics. It provides a single generic type Simd