Skip to content

rtx: make minimum SM a declared knob, MDL follows it, defaulting to virtual targets - #357

Merged
jeffamstutz merged 1 commit into
NVIDIA:next_releasefrom
tarcila:sanitized-sm-version-selection
Aug 13, 2026
Merged

rtx: make minimum SM a declared knob, MDL follows it, defaulting to virtual targets#357
jeffamstutz merged 1 commit into
NVIDIA:next_releasefrom
tarcila:sanitized-sm-version-selection

Conversation

@tarcila

@tarcila tarcila commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

The floor was picked twice: CMAKE_CUDA_ARCHITECTURES from a neural/CUDA-version branch (89, 75 or 52-virtual) feeding both host kernels and OptiX modules, and the MDL backend from a hardcoded "52". Nothing named the floor, so it could not be moved without editing both, and the supported GPU range stayed implicit in the branch.

VISRTX_MIN_ARCH now names it and feeds all three consumers. It defaults to 50 -- OptiX's own floor for every version we build against, so 52 gave up first-gen Maxwell for nothing -- and to 75 under CUDA 13, which dropped pre-Turing codegen; an explicit floor below 75 there is a configure error rather than a silent arch shift. VISRTX_ENABLE_NEURAL raises the floor to 89 (cooperative vectors need Ada) instead of overriding one consumer of it. The MDL backend's sm_version is the highest entry its fixed set offers at or below the floor, so generated material PTX never outranks the GPU it links into.

-DCMAKE_CUDA_ARCHITECTURES=<...> still overrides the host kernels (e.g. "75-real;80-real" for offline, JIT-free launches). This is a host-kernel-only knob: the OptiX module target stays pinned at compute_ (a -real override would emit cubins optixModuleCreate cannot load), and the MDL backend's sm_version tracks VISRTX_MIN_ARCH, not this variable -- so all three consumers stay in agreement regardless of the host-side override.

The floor was picked twice: CMAKE_CUDA_ARCHITECTURES from a neural/CUDA-version
branch (89, 75 or 52-virtual) feeding both host kernels and OptiX modules, and
the MDL backend from a hardcoded "52". Nothing named the floor, so it could not
be moved without editing both, and the supported GPU range stayed implicit in
the branch.

VISRTX_MIN_ARCH now names it and feeds all three consumers. It defaults to 50 --
OptiX's own floor for every version we build against, so 52 gave up first-gen
Maxwell for nothing -- and to 75 under CUDA 13, which dropped pre-Turing codegen;
an explicit floor below 75 there is a configure error rather than a silent arch
shift. VISRTX_ENABLE_NEURAL raises the floor to 89 (cooperative vectors need Ada)
instead of overriding one consumer of it. The MDL backend's sm_version is the
highest entry its fixed set offers at or below the floor, so generated material
PTX never outranks the GPU it links into.

-DCMAKE_CUDA_ARCHITECTURES=<...> still overrides the host kernels (e.g.
"75-real;80-real" for offline, JIT-free launches). This is a host-kernel-only
knob: the OptiX module target stays pinned at compute_<floor> (a -real override
would emit cubins optixModuleCreate cannot load), and the MDL backend's
sm_version tracks VISRTX_MIN_ARCH, not this variable -- so all three consumers
stay in agreement regardless of the host-side override.
@tarcila
tarcila requested a review from jeffamstutz August 13, 2026 19:04
Comment thread devices/rtx/device/CMakeLists.txt
@jeffamstutz
jeffamstutz merged commit 2eec808 into NVIDIA:next_release Aug 13, 2026
8 checks passed
@tarcila
tarcila deleted the sanitized-sm-version-selection branch August 13, 2026 23:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants