Skip to content

CUDA: Update arch selection, restructure for maintainability

Henry Schreiner requested to merge henryiii/cmake:fix/updateCUDA into master

I've restructured the select_compute_arch.cmake to be much easier to maintain (especially as support is removed for old architectures). The new structure starts by listing what is supported in 7.0, then works forward, adding, setting, or removing by version, so in the future, just one new block per CUDA version needs to be added.

If there's a good place for unit tests, I could add some.

Several issues were cleaned up a bit along the way, based on the release notes and common versions available.

  • 2.* was missing from 7.0-8.0
  • 3.7 was missing
  • 5.2 was missing from "all" archs but was in common archs
  • The linked page shows 5.3 (missing) as the common arch, not 5.2
  • Fermi was still showing up even when not supported on CUDA 9.0+
  • 3.0 was not deprecated until 10.0
  • 3.0 and 3.2 were removed in 11.0 (the bug report above)
  • 3.5 and 3.7 are deprecated in 11, so 3.5 has been remove form common for that version (still in all, as usual)

Output

For better diagnostics, I've added the ability to run the file. Running the following (in fish):

for i in {7.0, 7.5, 8.0, 9.0, 9.1, 10.0, 10.1, 10.2, 11.0, 11.1, 11.2}
    echo "CUDA $i"
    cmake -D CUDA_VERSION=$i -P select_compute_arch.cmake
end

(I forgot 9.2, but nothing changed in it) Gives:

Before:
CUDA 7.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;5.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="6.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0"
CUDA 7.5
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;5.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="6.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0"
CUDA 8.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;6.0;6.1;6.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="7.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2"
CUDA 9.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;6.0;6.1;7.0;7.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2"
CUDA 9.1
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;6.0;6.1;7.0;7.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2"
CUDA 10.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;6.0;6.1;7.0;7.5;7.5+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2;7.5"
CUDA 10.1
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;6.0;6.1;7.0;7.5;7.5+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2;7.5"
CUDA 10.2
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;3.0;5.2;6.0;6.1;7.0;7.5;7.5+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2;7.5"
CUDA 11.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing;Ampere"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.0+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.6"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2;7.5;8.0"
CUDA 11.1
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing;Ampere"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.6;8.6+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="9.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2;7.5;8.0;8.6"
CUDA 11.2
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing;Ampere"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.6;8.6+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="9.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;5.0;6.0;6.1;6.2;7.0;7.2;7.5;8.0;8.6"
After:
CUDA 7.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra"
-- CUDA_COMMON_GPU_ARCHITECTURES="2.0;2.1;3.0;3.5;5.0;5.3;5.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="6.0"
-- CUDA_ALL_GPU_ARCHITECTURES="2.0;2.1;3.0;3.2;3.5;3.7;5.0;5.2;5.3"
CUDA 7.5
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra"
-- CUDA_COMMON_GPU_ARCHITECTURES="2.0;2.1;3.0;3.5;5.0;5.3;5.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="6.0"
-- CUDA_ALL_GPU_ARCHITECTURES="2.0;2.1;3.0;3.2;3.5;3.7;5.0;5.2;5.3"
CUDA 8.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Fermi;Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.0;3.5;5.0;5.3;6.0;6.1;6.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="7.0"
-- CUDA_ALL_GPU_ARCHITECTURES="2.0;2.1;3.0;3.2;3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2"
CUDA 9.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.0;3.5;5.0;5.3;6.0;6.1;7.0;7.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2"
CUDA 9.1
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.0;3.5;5.0;5.3;6.0;6.1;7.0;7.2+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2"
CUDA 10.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;5.3;6.0;6.1;7.0;7.5;7.5+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2;7.5"
CUDA 10.1
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;5.3;6.0;6.1;7.0;7.5;7.5+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2;7.5"
CUDA 10.2
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing"
-- CUDA_COMMON_GPU_ARCHITECTURES="3.5;5.0;5.3;6.0;6.1;7.0;7.5;7.5+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.0;3.2;3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2;7.5"
CUDA 11.0
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing;Ampere"
-- CUDA_COMMON_GPU_ARCHITECTURES="5.3;6.0;6.1;7.0;7.5;8.0;8.0+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="8.6"
-- CUDA_ALL_GPU_ARCHITECTURES="3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2;7.5;8.0"
CUDA 11.1
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing;Ampere"
-- CUDA_COMMON_GPU_ARCHITECTURES="5.3;6.0;6.1;7.0;7.5;8.0;8.6;8.6+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="9.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2;7.5;8.0;8.6"
CUDA 11.2
-- CUDA_KNOWN_GPU_ARCHITECTURES="Kepler;Maxwell;Kepler+Tegra;Kepler+Tesla;Maxwell+Tegra;Pascal;Volta;Turing;Ampere"
-- CUDA_COMMON_GPU_ARCHITECTURES="5.3;6.0;6.1;7.0;7.5;8.0;8.6;8.6+PTX"
-- CUDA_LIMIT_GPU_ARCHITECTURE="9.0"
-- CUDA_ALL_GPU_ARCHITECTURES="3.5;3.7;5.0;5.2;5.3;6.0;6.1;6.2;7.0;7.2;7.5;8.0;8.6"

Fixes: #21712 (closed)
Topic-rename: cuda-archs

Edited by Brad King

Merge request reports