CI/CD

The CI/CD pipelines run the ReProspect tests and examples for a variety of configurations.

The current CI/CD strategy matrix covers:

  • many CUDA versions

  • many architectures

  • nvcc or clang as CUDA compiler

    matrix.extend(from_config(Config(
        cuda_version='12.8.1',
        ubuntu_version='24.04',
        python_version='3.12',
        compilers={'CXX': Compiler(ID='GNU', version='13'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=7, minor=0),
        platforms=(Platform.from_str('linux/amd64'), Platform.from_str('linux/arm64')),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.8.1',
        ubuntu_version='24.04',
        python_version='3.13',
        compilers={'CXX': Compiler(ID='GNU', version='14'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=9, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.1.0',
        ubuntu_version='24.04',
        python_version='3.13',
        compilers={'CXX': Compiler(ID='GNU', version='14'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=12, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
        use_for_documentation=True,
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.1.0',
        ubuntu_version='24.04',
        python_version='3.13',
        compilers={'CXX': Compiler(ID='GNU', version='14'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=12, minor=0),
        platforms=(Platform.from_str('linux/arm64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.6.3',
        ubuntu_version='22.04',
        python_version='3.10',
        compilers={'CXX': Compiler(ID='GNU', version='12'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=7, minor=5),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.8.1',
        ubuntu_version='24.04',
        python_version='3.12',
        compilers={'CXX': Compiler(ID='GNU', version='13'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=8, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.6.3',
        ubuntu_version='24.04',
        python_version='3.12',
        compilers={'CXX': Compiler(ID='GNU', version='13'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=8, minor=9),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.0.0',
        ubuntu_version='24.04',
        python_version='3.11',
        compilers={'CXX': Compiler(ID='GNU', version='14'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=8, minor=6),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.8.1',
        ubuntu_version='24.04',
        python_version='3.12',
        compilers={'CXX': Compiler(ID='Clang', version='19'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=7, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.1.0',
        ubuntu_version='24.04',
        python_version='3.14',
        compilers={'CXX': Compiler(ID='GNU', version='14'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=10, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.2.0',
        ubuntu_version='24.04',
        python_version='3.14',
        compilers={'CXX': Compiler(ID='GNU', version='14'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=10, minor=0),
        platforms=(Platform.from_str('linux/amd64'), Platform.from_str('linux/arm64')),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.0.0',
        ubuntu_version='24.04',
        python_version='3.12',
        compilers={'CXX': Compiler(ID='Clang', version='20'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=12, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.1.0',
        ubuntu_version='24.04',
        python_version='3.14',
        compilers={'CXX': Compiler(ID='Clang', version='21'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=10, minor=3),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.1.0',
        ubuntu_version='24.04',
        python_version='3.13',
        compilers={'CXX': Compiler(ID='Clang', version='21'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=12, minor=1),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.8.1',
        ubuntu_version='24.04',
        python_version='3.11',
        compilers={'CXX': Compiler(ID='Clang', version='21')},
        compute_capability=ComputeCapability(major=12, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='12.8.1',
        ubuntu_version='24.04',
        python_version='3.12',
        compilers={'CXX': Compiler(ID='Clang', version='22')},
        compute_capability=ComputeCapability(major=9, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.1.0',
        ubuntu_version='24.04',
        python_version='3.13',
        compilers={'CXX': Compiler(ID='Clang', version='22')},
        compute_capability=ComputeCapability(major=10, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.2.1',
        ubuntu_version='24.04',
        python_version='3.14',
        compilers={'CXX': Compiler(ID='Clang', version='21'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=12, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

    matrix.extend(from_config(Config(
        cuda_version='13.3.0',
        ubuntu_version='26.04',
        python_version='3.14',
        compilers={'CXX': Compiler(ID='GNU', version='15'), 'CUDA': Compiler(ID='NVIDIA')},
        compute_capability=ComputeCapability(major=12, minor=0),
        platforms=(Platform.from_str('linux/amd64'),),
    ), deps=deps))

The CI/CD pipelines run the tests and examples in Docker containers. For each entry in the strategy matrix, the CI/CD pipeline builds two images:

  • the first image contains the dependencies needed to build and run the ReProspect tests for the given configuration;

  • the second image contains, in addition, a Kokkos installation (currently 5.1.0) and a compatible Kokkos Tools installation, as needed to run the ReProspect examples.

The CI/CD pipelines configure, build and install Kokkos by running the script docker/kokkos.sh that sets the CMake arguments as follows:

# When nvcc is used as CUDA compiler, use 'nvcc_wrapper'.
if [[ "${KOKKOS_CUDA_COMPILER}" == "nvcc" ]];then
    cmake_args_kokkos=(
        "-DCMAKE_CXX_COMPILER=/opt/kokkos-sources/kokkos-${KOKKOS_SHA}/bin/nvcc_wrapper"
    )
    export NVCC_WRAPPER_DEFAULT_COMPILER=${KOKKOS_CXX_COMPILER}
else
    cmake_args_kokkos=(
        "-DCMAKE_CXX_COMPILER=${KOKKOS_CXX_COMPILER}"
        "-DCMAKE_CUDA_COMPILER=${KOKKOS_CUDA_COMPILER}"
    )
fi

cmake_args_kokkos+=(
    "-DCMAKE_BUILD_TYPE=Release"
    "-DCMAKE_CXX_STANDARD=20"
    "-DBUILD_SHARED_LIBS=ON"
    "-DCMAKE_CXX_EXTENSIONS=OFF"
    "-DKokkos_ENABLE_SERIAL=ON"
    "-DKokkos_ENABLE_CUDA=ON"
    "-DKokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC=ON"
    "-DKokkos_ARCH_${KOKKOS_ARCH}=ON"
    "-DKokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE=ON"
    "-DCMAKE_INSTALL_PREFIX=/opt/kokkos-${KOKKOS_SHA}/${KOKKOS_INSTALL_SUFFIX}"
)

The full list of images the CI/CD pipelines build is as follows:

ghcr.io/uliegecsm/reprospect/cuda-clang-19-nvidia-py3.12:12.8.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-19-nvidia-py3.12-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-volta70
ghcr.io/uliegecsm/reprospect/cuda-clang-20-nvidia-py3.12:13.0.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-20-nvidia-py3.12-kokkos-5.1.0:13.0.0-devel-ubuntu24.04-blackwell120
ghcr.io/uliegecsm/reprospect/cuda-clang-21-clang-py3.11:12.8.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-21-clang-py3.11-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-blackwell120
ghcr.io/uliegecsm/reprospect/cuda-clang-21-nvidia-py3.13:13.1.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-21-nvidia-py3.13-kokkos-5.1.0:13.1.0-devel-ubuntu24.04-blackwell121
ghcr.io/uliegecsm/reprospect/cuda-clang-21-nvidia-py3.14:13.1.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-21-nvidia-py3.14-kokkos-5.1.0:13.1.0-devel-ubuntu24.04-blackwell103
ghcr.io/uliegecsm/reprospect/cuda-clang-21-nvidia-py3.14:13.2.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-21-nvidia-py3.14-kokkos-5.1.0:13.2.1-devel-ubuntu24.04-blackwell120
ghcr.io/uliegecsm/reprospect/cuda-clang-22-clang-py3.12:12.8.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-22-clang-py3.12-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-hopper90
ghcr.io/uliegecsm/reprospect/cuda-clang-22-clang-py3.13:13.1.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-clang-22-clang-py3.13-kokkos-5.1.0:13.1.0-devel-ubuntu24.04-blackwell100
ghcr.io/uliegecsm/reprospect/cuda-gnu-12-nvidia-py3.10:12.6.3-devel-ubuntu22.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-12-nvidia-py3.10-kokkos-5.1.0:12.6.3-devel-ubuntu22.04-turing75
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12:12.6.3-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12-kokkos-5.1.0:12.6.3-devel-ubuntu24.04-ada89
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12:12.8.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-ampere80
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12:12.8.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-volta70
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12:12.8.1-devel-ubuntu24.04-arm64
ghcr.io/uliegecsm/reprospect/cuda-gnu-13-nvidia-py3.12-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-volta70-arm64
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.11:13.0.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.11-kokkos-5.1.0:13.0.0-devel-ubuntu24.04-ampere86
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.13:12.8.1-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.13-kokkos-5.1.0:12.8.1-devel-ubuntu24.04-hopper90
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.13:13.1.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.13-kokkos-5.1.0:13.1.0-devel-ubuntu24.04-blackwell120
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.13:13.1.0-devel-ubuntu24.04-arm64
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.13-kokkos-5.1.0:13.1.0-devel-ubuntu24.04-blackwell120-arm64
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.14:13.1.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.14-kokkos-5.1.0:13.1.0-devel-ubuntu24.04-blackwell100
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.14:13.2.0-devel-ubuntu24.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.14-kokkos-5.1.0:13.2.0-devel-ubuntu24.04-blackwell100
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.14:13.2.0-devel-ubuntu24.04-arm64
ghcr.io/uliegecsm/reprospect/cuda-gnu-14-nvidia-py3.14-kokkos-5.1.0:13.2.0-devel-ubuntu24.04-blackwell100-arm64
ghcr.io/uliegecsm/reprospect/cuda-gnu-15-nvidia-py3.14:13.3.0-devel-ubuntu26.04
ghcr.io/uliegecsm/reprospect/cuda-gnu-15-nvidia-py3.14-kokkos-5.1.0:13.3.0-devel-ubuntu26.04-blackwell120

These images are public and can be pulled anonymously from the GitHub Container Registry:

docker pull ghcr.io/uliegecsm/reprospect/IMAGE_NAME