Build device code for Volta, and document the driver floor
Build Packages / build:windows:nocuda (push) Successful in 14m38s
Build Packages / build:viewer-tgz:cpu (push) Successful in 18m34s
Build Packages / build:viewer-tgz:cuda (push) Successful in 21m44s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 23m0s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 23m41s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 28m36s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 28m38s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 28m54s
Build Packages / build:windows:cuda (push) Successful in 15m45s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 19m56s
Build Packages / XDS test (durin plugin) (push) Successful in 10m58s
Build Packages / build:rpm (rocky9) (push) Successful in 21m16s
Build Packages / Generate python client (push) Successful in 35s
Build Packages / Build documentation (push) Successful in 1m9s
Build Packages / Create release (push) Skipped
Build Packages / build:rpm (rocky8) (push) Successful in 28m17s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 11m39s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 21m36s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 26m33s
Build Packages / DIALS test (push) Successful in 21m38s
Build Packages / XDS test (neggia plugin) (push) Successful in 10m42s
Build Packages / Unit tests (push) Successful in 2h33m11s

CMAKE_CUDA_ARCHITECTURES had no sm_70 entry, and PTX only ever JIT-compiles
forwards, so a V100 had no runnable code in the fatbin at all - every kernel
launch failed with "no kernel image is available for execution on the device".

Append 70 only for a CUDA 12 toolkit: CUDA 13 removed offline compilation for
Volta, so an unconditional entry would break the RHEL 9, Ubuntu and Windows
builds. 12.8/12.9 still emit it but warn on every .cu, hence
-Wno-deprecated-gpu-targets. The append goes after ENABLE_LANGUAGE(CUDA), where
the nvcc version is known, matching the existing sm_121 handling.

Verified: all 15 CUDA sources compile for sm_70 (including ffbidx, which already
guards on __CUDA_ARCH__ >= 700/800), and cuobjdump shows an sm_70 cubin in the
built rugnux binary.

Consequence worth documenting: a V100 can only run the artefacts built with
CUDA 12 - the RHEL 8 packages and the portable Linux .tgz. Document that
alongside the minimum NVIDIA driver of every released artefact (525.60.13 for
CUDA 12, 580.65.06 for CUDA 13), which applies because the CUDA runtime is
linked statically and cuFFT is bundled, so the driver is the only NVIDIA
component the target host must supply.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-22 18:06:43 +02:00
co-authored by Claude Opus 5
parent 538f3504d3
commit 4e6600a96c
5 changed files with 60 additions and 1 deletions
+11 -1
View File
@@ -71,7 +71,7 @@ CHECK_LANGUAGE(CUDA)
# GPU architectures to generate device code for: Turing (T4), Ampere (A100; RTX A4000), Ada (L4),
# Hopper, and Blackwell in both its data-centre and consumer forms. A bare entry emits SASS *and*
# PTX for that architecture, so the newest one here also covers any future GPU: the driver
# JIT-compiles its PTX on first launch.
# JIT-compiles its PTX on first launch. Volta (V100) is added below, once the nvcc version is known.
SET(CMAKE_CUDA_ARCHITECTURES 75 80 86 89 90 100 120)
SET(CMAKE_CUDA_STANDARD 20)
SET(CMAKE_CUDA_STANDARD_REQUIRED True)
@@ -93,6 +93,16 @@ IF (CMAKE_CUDA_COMPILER)
IF (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "12.9")
LIST(APPEND CMAKE_CUDA_ARCHITECTURES 121)
ENDIF()
# Volta (V100) is sm_70, and PTX only ever JITs *forwards* - without an sm_70 entry a
# V100 has no runnable code in the fatbin at all and every launch fails with "no kernel
# image is available for execution on the device". CUDA 13 removed offline compilation
# for Volta, so only a CUDA 12 toolkit can emit it; 12.8/12.9 still do, but warn on
# every .cu, hence -Wno-deprecated-gpu-targets. Volta is the floor - older GPUs are
# not in use here.
IF (CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "13.0")
LIST(APPEND CMAKE_CUDA_ARCHITECTURES 70)
SET(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Wno-deprecated-gpu-targets")
ENDIF()
ELSE()
MESSAGE(WARNING "CUDA older than 12.8 not supported")
ENDIF()
+6
View File
@@ -1,5 +1,11 @@
# Changelog
## 1.0.0
### 1.0.0-rc.162
This is an UNSTABLE release. It includes many experimental features, as well as many AI generated fixes. We recommend using rc.152 for production use.
* CUDA builds made with a CUDA 12 toolkit now also contain device code for Volta, so the RHEL 8 packages and the portable Linux `.tgz` run on a V100; CUDA 13 dropped Volta, so the RHEL 9, Ubuntu and Windows artefacts remain Turing and newer.
* Documentation: the supported GPU generations and the minimum NVIDIA driver version of every released artefact.
### 1.0.0-rc.161
This is an UNSTABLE release. It includes many experimental features, as well as many AI generated fixes. We recommend using rc.152 for production use.
+7
View File
@@ -65,6 +65,13 @@ Windows installer) for the embedded indexing and integration; the non-CUDA build
pipeline on the CPU at much lower throughput. The CUDA build also runs on a machine without a GPU —
see [Release contents ▸ CUDA and non-CUDA builds](RELEASE_CONTENTS.md#cuda-and-non-cuda-builds).
The CUDA build needs an NVIDIA **driver** on the host but no CUDA toolkit — 525.60.13 or newer for
the CUDA 12 artefacts (RHEL 8 packages, portable Linux `.tgz`), 580.65.06 or newer on Linux and an
R580 driver on Windows for the CUDA 13 ones (RHEL 9, Ubuntu, Windows installer). The Windows
installer and the `.tgz` are CUDA 13 and CUDA 12 respectively, which also decides the oldest GPU
they run on — a V100 needs the CUDA 12 `.tgz`. See
[Release contents ▸ GPU generations and the NVIDIA driver](RELEASE_CONTENTS.md#gpu-generations-and-the-nvidia-driver).
## Opening data
- **File ▸ Open** (`Ctrl+O`) — open a local HDF5 file.
+30
View File
@@ -82,6 +82,36 @@ bigger than the CPU ones — the other reason for shipping both.
On a machine with an NVIDIA GPU, take the CUDA variant: only that one uses the GPU.
## GPU generations and the NVIDIA driver
A CUDA variant carries compiled device code for a fixed set of GPU generations, and which
generations those are follows from the CUDA toolkit it was built with. The CUDA runtime is linked
statically, so the only NVIDIA component the target machine has to supply is the **driver** — there
is no CUDA-toolkit version requirement on the host.
| Artefact | CUDA toolkit | GPU generations | Minimum driver |
| --- | --- | --- | --- |
| RHEL 8 packages, portable Linux `.tgz` | 12.9 | Volta (V100) through Blackwell: `sm_70`, `75`, `80`, `86`, `89`, `90`, `100`, `120`, `121` | 525.60.13 |
| RHEL 9 and Ubuntu packages, Windows installer | 13.x | Turing (T4) through Blackwell: the same list **without** `sm_70` | 580.65.06 (Linux), R580 (Windows) |
| any `cpu` / `nocuda` variant | — | — | none |
**A V100 needs the CUDA 12 build.** CUDA 13 dropped offline compilation for Volta, and the PTX a
fatbin also carries only ever JIT-compiles *forwards*, so a CUDA 13 artefact contains nothing a V100
can execute: every kernel launch fails with *no kernel image is available for execution on the
device*. On a V100 host take the RHEL 8 packages or the portable Linux `.tgz`. Nothing older than
Volta is supported.
Newer GPUs never need a newer build — the highest generation in the list ships PTX as well as SASS,
which the driver JIT-compiles for a GPU that came out after the release.
The minimum driver above is the floor for the whole CUDA *major* version, which is what applies here
because the CUDA runtime is statically linked
([CUDA minor version compatibility](https://docs.nvidia.com/deploy/cuda-compatibility/minor-version-compatibility.html)).
Newer drivers are always fine; they are backward compatible. A driver from the same release as the
build toolkit (575.57.08 for the CUDA 12.9 build, 610.43.02 for a CUDA 13.3 one) additionally rules
out the single caveat of minor version compatibility — a call into a driver API newer than the
installed driver, which fails with `cudaErrorCallRequiresNewerDriver`.
## Windows installer
The Windows artefact covers `jfjoch_viewer` and the portable analysis CLIs only; the rest of
+6
View File
@@ -32,6 +32,12 @@ provides the GPU fast-feedback indexer (`ffbidx`) and the GPU FFT indexer (`fft`
only the CPU `fftw` indexer is available. Spot finding, integration and scaling run on the CPU and
scale with the thread count (`-N`).
The released CUDA builds need only an NVIDIA **driver** on the host, no CUDA toolkit: 525.60.13 or
newer for the CUDA 12 artefacts (RHEL 8 packages, portable Linux `.tgz`) and 580.65.06 or newer for
the CUDA 13 ones (RHEL 9, Ubuntu, Windows). Which GPU generations each artefact supports — a V100
in particular works only with the CUDA 12 build — is in
[Release contents ▸ GPU generations and the NVIDIA driver](RELEASE_CONTENTS.md#gpu-generations-and-the-nvidia-driver).
## Input and output
**Input** is a single Jungfraujoch HDF5 master file (NXmx-based). Spots are always found by `rugnux`