Skip to content

Default NvvmArch::Compute75 silently produces InvalidPtx on pre-Turing GPUs (Pascal/Maxwell/Volta) #410

Description

@helenkwok

What happened

Following the getting-started guide on a GTX 1070 (Pascal, sm_61) with CUDA 12.9, cargo run builds successfully but fails at runtime with:

Error: InvalidPtx

No indication of why the PTX is invalid.

Root cause

cuda_builder::CudaBuilder defaults to NvvmArch::Compute75 (crates/nvvm/src/lib.rs):

/// This default value of 7.5 corresponds to Turing and later devices. We default to this
/// because it is the minimum supported by CUDA 13.0 while being in the middle of the range
/// supported by CUDA 12.x.
#[default]
Compute75,

This is a deliberate, documented choice — but it means the getting-started example silently generates PTX targeting sm_75, which the CUDA driver refuses to load on any GPU below Turing (Pascal, Maxwell, Volta — all still fully supported for building/running on CUDA 12.x, just not compiling for them by default). The failure surfaces as a generic cust::error::CudaError::InvalidPtx with nothing pointing at the arch mismatch, which is a confusing first-run experience for anyone following the guide on older hardware.

Suggestions (either would help; happy to send a PR for whichever is preferred)

  1. Guide fix: add a line to the getting-started example / Windows setup section noting that .arch(NvvmArch::ComputeXX) should be set explicitly to match the target GPU's actual compute capability, with a pointer to Compute Capability Gating and to nvidia-smi --query-gpu=compute_cap --format=csv for finding it.
  2. Better diagnostics: have cust::Module::from_ptx (or the PTX loader) detect a CUDA_ERROR_INVALID_PTX / CUDA_ERROR_NO_BINARY_FOR_GPU outcome and, when possible, compare the PTX's .target smXX line against the current device's actual compute capability, surfacing a clearer error like "PTX built for sm_75 but device is sm_61 — rebuild with .arch(NvvmArch::Compute61)".

Either fix would have saved a fair amount of debugging time here since the error gives no hint that architecture — not toolchain or driver version — is the issue.

Environment

  • GPU: GTX 1070 (Pascal, sm_61)
  • Driver: 582.28
  • CUDA Toolkit: 12.9.2
  • Rust nightly: pinned per rust-toolchain.toml at the commit in question
  • OS: Windows 11

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions