Rust-GPU / Rust-GPU/rust-cuda

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

Open
#410 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
5.4k
Forks
249
PR merge metrics
No merged PRs in 30d

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with crates/nvvm/src/lib.rs and the getting-started guide to confirm the documented Compute75 default and how the example configures its architecture. Then inspect cust::Module::from_ptx and the PTX loader entry points to assess the diagnostic option. Done means an agreed guide or diagnostic improvement addresses pre-Turing GPUs and includes coverage or documentation for the resulting behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend, documentation
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.