Skip to content

Add portable CUDA builds for multiple NVIDIA GPU architectures #109

Description

@jayzou3773

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions