diff --git a/CMakeLists.txt b/CMakeLists.txt index 87a015d9..5885cf69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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() diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 25716849..56260509 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -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. diff --git a/docs/JFJOCH_VIEWER.md b/docs/JFJOCH_VIEWER.md index b355d7de..ae3a3278 100644 --- a/docs/JFJOCH_VIEWER.md +++ b/docs/JFJOCH_VIEWER.md @@ -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. diff --git a/docs/RELEASE_CONTENTS.md b/docs/RELEASE_CONTENTS.md index 5b131f8f..2b4718d2 100644 --- a/docs/RELEASE_CONTENTS.md +++ b/docs/RELEASE_CONTENTS.md @@ -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 diff --git a/docs/RUGNUX.md b/docs/RUGNUX.md index c26598a1..3d40cb57 100644 --- a/docs/RUGNUX.md +++ b/docs/RUGNUX.md @@ -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`