Summary
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
- Changing traffic simulation or routing algorithms
Summary
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 with90-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
cuobjdumpAcceptance criteria
CUDA_DISABLE_PTX_JIT=1runs successfully on H100 and B200CUDA_FORCE_PTX_JIT=1runs successfully on H100 and B200Non-goals