You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add portable CUDA builds for multiple NVIDIA GPU architectures #109
Add a portable CUDA build and runtime compatibility layer so one LPSim release can run efficiently across common NVIDIA GPU generations, including A100 (SM80), L40 (SM89), H100/H200 (SM90), and B100/B200 (SM100).
Motivation
The repository currently defaults to CUDA architectures 80;89;90. The B200 deployment uses a separate untracked build with 90-real;90-virtual, which runs on B200 through PTX JIT rather than native SM100 code. CI only compiles SM80. This makes supported architectures, fallback behavior, and deployed artifacts inconsistent.
Proposed work
Make the default CUDA architecture list explicit and override-friendly
Build native cubins for SM80, SM89, SM90, and SM100
Embed PTX fallbacks for forward compatibility
Require a CUDA toolkit with native Blackwell compiler support for universal builds
Add runtime reporting for GPU name, compute capability, memory, driver/runtime versions, and peer-access support
Fail early with an actionable error for unsupported devices or an invalid GPU count
Add a build-artifact inspection script using cuobjdump
Document universal, H100-only, B200-only, and PTX-JIT validation commands
Validate compilation and execution on B200 and H100 hardware
Compare cross-GPU simulation outputs using aggregate tolerances rather than byte-for-byte equality
Acceptance criteria
A universal build contains native SM80, SM89, SM90, and SM100 cubins
The universal build contains documented PTX fallback code
CUDA_DISABLE_PTX_JIT=1 runs successfully on H100 and B200
CUDA_FORCE_PTX_JIT=1 runs successfully on H100 and B200
Startup logs identify every selected GPU and its compute capability
Mixed-GPU peer-access limitations are reported clearly
Existing network, demand, and simulation output schemas remain unchanged
Local tests and the existing GitHub Actions workflow pass
Non-goals
Rewriting static kernels around NVRTC
Adding architecture-specific SM100a kernels
Guaranteeing byte-identical floating-point output across GPU generations
Activity