Demo project showing a single Rust codebase running on CPU and directly on GPUs
Rust
497
21 commits
updated Apr 4, 2026
A cross-platform demo of a single Rust codebase running on both the CPU and GPU via CUDA, Vulkan, Metal, and DirectX. There are no shader or kernel languages used, only Rust.
| Platform | Rust Features | Host | Backend | Driver | How it Works | Status |
|---|---|---|---|---|---|---|
| Linux | - | CPU | - | - | Rust → Native | ✅ Working |
| Linux | wgpu | wgpu | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Linux | ash | ash | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Linux | cuda | cust | CUDA | Native | Rust → NVVM → PTX | ✅ Working |
| macOS | - | CPU | - | - | Rust → Native | ✅ Working |
| macOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | ✅ Working |
| macOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | ✅ Working |
| macOS | wgpu,vulkan | wgpu | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| macOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | ✅ Working |
| macOS | ash | ash | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| macOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
| Windows | - | CPU | - | - | Rust → Native | ✅ Working |
| Windows | wgpu | wgpu | DX12 | Native | Rust → SPIR-V → HLSL | ✅ Working |
| Windows | wgpu,vulkan | wgpu | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Windows | wgpu,vulkan | wgpu | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| Windows | ash | ash | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Windows | ash | ash | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| Windows | cuda | cust | CUDA | Native | Rust → NVVM → PTX | ✅ Working |
| Android | - | CPU | - | - | Rust → Native | ✅ Working |
| Android | wgpu | wgpu | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Android | ash | ash | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Android | cuda | cust | CUDA | - | - | ❌ Unavailable2 |
| iOS | - | CPU | - | - | Rust → Native | ✅ Working |
| iOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | 🔷 Should work |
| iOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| iOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| iOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
| tvOS | - | CPU | - | - | Rust → Native | ✅ Working |
| tvOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | 🔷 Should work |
| tvOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| tvOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| tvOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
| visionOS | - | CPU | - | - | Rust → Native | ✅ Working |
| visionOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | 🔷 Should work |
| visionOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| visionOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| visionOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
The demo runs a bitonic sort on various data types (u32, i32, f32) with different sizes and configurations.
# CPU execution
cargo run --release
# Vulkan via wgpu
cargo run --release --features wgpu
# Vulkan via ash
cargo run --release --features ash
# CUDA (NVIDIA GPU required)
cargo run --release --features cuda
# CPU execution
cargo run --release
# Metal via wgpu (SPIR-V → MSL translation)
cargo run --release --features wgpu
# Vulkan via wgpu (requires MoltenVK)
cargo run --release --features wgpu,vulkan
# Vulkan via ash (requires MoltenVK)
cargo run --release --features ash
# CPU execution
cargo run --release
# DirectX 12 via wgpu (SPIR-V → HLSL translation)
cargo run --release --features wgpu
# Vulkan via wgpu
cargo run --release --features wgpu,vulkan
# Vulkan via ash
cargo run --release --features ash
# CUDA (NVIDIA GPU required)
cargo run --release --features cuda
Instead of cargo run you can replace it with cargo test to run unit tests for the
same configuration.
rust-gpu-chimera-demo/
├── kernel/ # Compute kernel logic and entrypoints
│ └── src/
│ └── lib.rs
├── shared/ # Code that runs on both the CPU and GPU
│ └── src/
│ └── lib.rs
├── src/
│ ├── runners/ # Code that runs on the CPU/host and interfaces with the GPU
│ │ ├── cpu.rs
│ │ ├── cuda.rs
│ │ ├── wgpu.rs
│ │ └── ash.rs
│ ├── lib.rs
│ └── main.rs # Demo application binary
└── build.rs # Kernel compilation orchestration
20 commits
1 commits
Rust
82.6%
Shell
17.4%
Demo project showing a single Rust codebase running on CPU and directly on GPUs
Rust
497
21 commits
updated Apr 4, 2026
A cross-platform demo of a single Rust codebase running on both the CPU and GPU via CUDA, Vulkan, Metal, and DirectX. There are no shader or kernel languages used, only Rust.
| Platform | Rust Features | Host | Backend | Driver | How it Works | Status |
|---|---|---|---|---|---|---|
| Linux | - | CPU | - | - | Rust → Native | ✅ Working |
| Linux | wgpu | wgpu | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Linux | ash | ash | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Linux | cuda | cust | CUDA | Native | Rust → NVVM → PTX | ✅ Working |
| macOS | - | CPU | - | - | Rust → Native | ✅ Working |
| macOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | ✅ Working |
| macOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | ✅ Working |
| macOS | wgpu,vulkan | wgpu | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| macOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | ✅ Working |
| macOS | ash | ash | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| macOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
| Windows | - | CPU | - | - | Rust → Native | ✅ Working |
| Windows | wgpu | wgpu | DX12 | Native | Rust → SPIR-V → HLSL | ✅ Working |
| Windows | wgpu,vulkan | wgpu | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Windows | wgpu,vulkan | wgpu | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| Windows | ash | ash | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Windows | ash | ash | Vulkan | SwiftShader | Rust → SPIR-V | ✅ Working |
| Windows | cuda | cust | CUDA | Native | Rust → NVVM → PTX | ✅ Working |
| Android | - | CPU | - | - | Rust → Native | ✅ Working |
| Android | wgpu | wgpu | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Android | ash | ash | Vulkan | Native | Rust → SPIR-V | ✅ Working |
| Android | cuda | cust | CUDA | - | - | ❌ Unavailable2 |
| iOS | - | CPU | - | - | Rust → Native | ✅ Working |
| iOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | 🔷 Should work |
| iOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| iOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| iOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
| tvOS | - | CPU | - | - | Rust → Native | ✅ Working |
| tvOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | 🔷 Should work |
| tvOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| tvOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| tvOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
| visionOS | - | CPU | - | - | Rust → Native | ✅ Working |
| visionOS | wgpu | wgpu | Metal | Metal | Rust → SPIR-V → MSL | 🔷 Should work |
| visionOS | wgpu,vulkan | wgpu | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| visionOS | ash | ash | Vulkan | MoltenVK | Rust → SPIR-V | 🔷 Should work |
| visionOS | cuda | cust | CUDA | - | - | ❌ Unavailable1 |
The demo runs a bitonic sort on various data types (u32, i32, f32) with different sizes and configurations.
# CPU execution
cargo run --release
# Vulkan via wgpu
cargo run --release --features wgpu
# Vulkan via ash
cargo run --release --features ash
# CUDA (NVIDIA GPU required)
cargo run --release --features cuda
# CPU execution
cargo run --release
# Metal via wgpu (SPIR-V → MSL translation)
cargo run --release --features wgpu
# Vulkan via wgpu (requires MoltenVK)
cargo run --release --features wgpu,vulkan
# Vulkan via ash (requires MoltenVK)
cargo run --release --features ash
# CPU execution
cargo run --release
# DirectX 12 via wgpu (SPIR-V → HLSL translation)
cargo run --release --features wgpu
# Vulkan via wgpu
cargo run --release --features wgpu,vulkan
# Vulkan via ash
cargo run --release --features ash
# CUDA (NVIDIA GPU required)
cargo run --release --features cuda
Instead of cargo run you can replace it with cargo test to run unit tests for the
same configuration.
rust-gpu-chimera-demo/
├── kernel/ # Compute kernel logic and entrypoints
│ └── src/
│ └── lib.rs
├── shared/ # Code that runs on both the CPU and GPU
│ └── src/
│ └── lib.rs
├── src/
│ ├── runners/ # Code that runs on the CPU/host and interfaces with the GPU
│ │ ├── cpu.rs
│ │ ├── cuda.rs
│ │ ├── wgpu.rs
│ │ └── ash.rs
│ ├── lib.rs
│ └── main.rs # Demo application binary
└── build.rs # Kernel compilation orchestration
20 commits
1 commits
Rust
82.6%
Shell
17.4%