name: SNL-CI on: pull_request: types: [ opened, reopened, synchronize ] permissions: contents: none # Cancels any in progress 'workflow' associated with this PR concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: SNL_NeedChecks: name: SNL_NeedChecks runs-on: ubuntu-latest outputs: code: ${{ steps.filter.outputs.code }} steps: - uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3 id: filter with: filters: | code: - '!**/*.md' SNL_CUDA_NVCC_12_2_CPP20: name: SNL_CUDA_NVCC_12_2_CPP20 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [snl-kk-env-cuda-12.2.0-gcc-11.3.0-latest] strategy: fail-fast: false matrix: dep_code_5: [ON, OFF] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: store_kokkos_mdspan_hash_to_env run: | echo "KOKKOS_MDSPAN_HASH=$(cat kokkos/tpls/mdspan-hash.txt)" >> $GITHUB_ENV - name: checkout_mdspan uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/mdspan path: mdspan ref: ${{ env.KOKKOS_MDSPAN_HASH }} - name: configure_mdspan run: cmake -B mdspan/build -DCMAKE_CXX_STANDARD=20 -DCMAKE_INSTALL_PREFIX=/tmp/mdspan-install -S mdspan - name: build_and_install_mdspan working-directory: mdspan run: cmake --build build --target install - name: configure_kokkos run: | nvidia-smi cd kokkos cmake -B build \ -DCMAKE_CXX_STANDARD=20 \ -DKokkos_ENABLE_CUDA=ON \ -DKokkos_ARCH_HOPPER90=ON \ -DKokkos_ARCH_NATIVE=ON \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DCMAKE_CXX_FLAGS="-Werror" \ -DBUILD_SHARED_LIBS=OFF \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=${{ matrix.dep_code_5 }} \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_LARGE_MEM_TESTS=ON \ -DKokkos_ENABLE_BENCHMARKS=ON \ -DKokkos_ENABLE_BENCHMARKS_HEAVY=ON \ -DKokkos_ENABLE_MDSPAN_EXTERNAL=ON \ -Dmdspan_ROOT=/tmp/mdspan-install \ ./ - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build -j36 cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 - name: build_examples working-directory: kokkos run: | cmake -S ${PWD}/example/build_cmake_installed_different_compiler -B build_examples \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS="-Werror" \ -DKokkos_ROOT=${PWD}/install cmake --build build_examples --parallel -j36 - name: test_examples working-directory: kokkos/build_examples run: ctest --output-on-failure SNL_HIP_ROCM_6_2_1_CPP23: name: SNL_HIP_ROCM_6_2_1_CPP23 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [rocm-6.2.1_openblas-0.3.28_zen3_gfx90a-latest-latest] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -S . -B build \ -DCMAKE_CXX_COMPILER=hipcc \ -DCMAKE_CXX_STANDARD=23 \ -DKokkos_ENABLE_HIP=ON \ -DKokkos_ARCH_AMD_GFX90A=ON \ -DKokkos_ARCH_NATIVE=ON \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DCMAKE_CXX_FLAGS="-Werror -Wno-unused-command-line-argument" \ -DBUILD_SHARED_LIBS=OFF \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=OFF \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_LARGE_MEM_TESTS=ON \ -DKokkos_ENABLE_BENCHMARKS=ON - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 - name: build_examples working-directory: kokkos run: | cmake -S ${PWD}/example/build_cmake_installed_different_compiler -B build_examples \ -DCMAKE_CXX_COMPILER=hipcc \ -DCMAKE_CXX_STANDARD=23 \ -DCMAKE_CXX_FLAGS="-Werror -Wno-unused-command-line-argument" \ -DKokkos_ROOT=${PWD}/install cmake --build build_examples --parallel $(nproc) - name: test_examples working-directory: kokkos/build_examples run: ctest --output-on-failure SNL_HIP_ROCM_10_0: name: SNL_HIP_ROCM_10_0 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [rocm-10.0_openblas-0.3.28_zen3_gfx90a] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -S . -B build \ -DCMAKE_CXX_COMPILER=hipcc \ -DCMAKE_CXX_STANDARD=20 \ -DKokkos_ENABLE_HIP=ON \ -DKokkos_ARCH_AMD_GFX90A=ON \ -DKokkos_ENABLE_HIP_RELOCATABLE_DEVICE_CODE=ON \ -DKokkos_ARCH_NATIVE=ON \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DCMAKE_CXX_FLAGS="-Werror -Wno-unused-command-line-argument" \ -DBUILD_SHARED_LIBS=OFF \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=OFF \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_LARGE_MEM_TESTS=ON \ -DKokkos_ENABLE_BENCHMARKS=OFF - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 - name: build_examples working-directory: kokkos run: | cmake -S ${PWD}/example/build_cmake_installed_different_compiler -B build_examples \ -DCMAKE_CXX_COMPILER=hipcc \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS="-Werror -Wno-unused-command-line-argument" \ -DKokkos_ROOT=${PWD}/install cmake --build build_examples --parallel $(nproc) - name: test_examples working-directory: kokkos/build_examples run: ctest --output-on-failure SNL_OPENMP_SERIAL_INTEL_2024_2_1: name: SNL_OPENMP_SERIAL_INTEL_2024_2_1 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [inteloneapi-basekit-2024.2.1-0-devel-ubuntu22.04-latest-spr] strategy: fail-fast: false matrix: dep_code_5: [ON, OFF] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -S . -B build \ -DCMAKE_CXX_COMPILER=icpx \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS='-Werror -fp-model=precise -Wno-pass-failed' \ -DKokkos_ENABLE_OPENMP=ON \ -DKokkos_ENABLE_SERIAL=ON \ -DKokkos_ARCH_SPR=ON \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=${{ matrix.dep_code_5 }} \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_LARGE_MEM_TESTS=ON \ -DKokkos_ENABLE_BENCHMARKS=ON \ -DKokkos_ENABLE_BENCHMARKS_HEAVY=ON \ - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 - name: build_examples working-directory: kokkos run: | cmake -S ${PWD}/example/build_cmake_installed_different_compiler -B build_examples \ -DCMAKE_CXX_COMPILER=icpx \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS='-Werror -fp-model=precise -Wno-pass-failed' \ -DKokkos_ROOT=${PWD}/install cmake --build build_examples --parallel $(nproc) - name: test_examples working-directory: kokkos/build_examples run: ctest --output-on-failure SNL_SYCL_INTEL_2024_2_1: name: SNL_SYCL_INTEL_2024_2_1 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [inteloneapi-basekit-2024.2.1-0-devel-ubuntu22.04-latest-pv] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -S . -B build \ -DCMAKE_CXX_COMPILER=icpx \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_FLAGS='-Werror -fp-model=precise -fsycl-device-code-split=per_kernel -Wno-zero-length-array -Wno-pass-failed' \ -DKokkos_ENABLE_SYCL=ON \ -DKokkos_ARCH_INTEL_PVC=ON \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=OFF \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_LARGE_MEM_TESTS=ON \ -DKokkos_ENABLE_BENCHMARKS=ON - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ONEAPI_DEVICE_SELECTOR=level_zero:gpu ctest --output-on-failure --timeout 3600 - name: build_examples working-directory: kokkos run: | cmake -S ${PWD}/example/build_cmake_installed_different_compiler -B build_examples \ -DCMAKE_CXX_COMPILER=icpx \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS='-Werror -fp-model=precise -fsycl-device-code-split=per_kernel -Wno-zero-length-array -Wno-pass-failed' \ -DKokkos_ROOT=${PWD}/install cmake --build build_examples --parallel $(nproc) - name: test_examples working-directory: kokkos/build_examples run: ONEAPI_DEVICE_SELECTOR=level_zero:gpu ctest --output-on-failure SNL_SERIAL_LLVM_14_0_6: name: SNL_SERIAL_LLVM_14_0_6 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [llvm-14.0.6_x86-64-latest-latest] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -S . -B build \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=clang++-14 \ -DCMAKE_CXX_FLAGS="-stdlib=libc++ -Werror" \ -DKokkos_ARCH_NATIVE=ON \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=OFF \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 SNL_SERIAL_CLANG_19_MODULES: name: SNL_SERIAL_CLANG_19_MODULES needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [clang-19_gcc-15.1_x86-64-latest] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -S . -B build \ -GNinja \ -DCMAKE_CXX_COMPILER=clang++-19 \ -DCMAKE_CXX_FLAGS="-Werror" \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_BUILD_TYPE=Debug \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_EXPERIMENTAL_CXX20_MODULES=ON \ -DKokkos_ENABLE_SERIAL=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=OFF \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 # FIXME_HPX: workaround for standard library calling OOM handler for failing nothrow new, remove once fixed SNL_HPX_GCC_15_1_1: name: SNL_HPX_GCC_15_1_1 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [ci-containersfedora-latest-latest] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: set_hpx_vars run: echo "HPX_HANDLE_FAILED_NEW=0" >> $GITHUB_ENV - name: configure_kokkos run: | cd kokkos cmake -B build \ -DBUILD_SHARED_LIBS=ON \ -DKokkos_ENABLE_HWLOC=ON \ -DKokkos_ENABLE_HPX=ON \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_LARGE_MEM_TESTS=ON \ -DKokkos_ENABLE_BENCHMARKS=ON \ -DKokkos_ENABLE_BENCHMARKS_HEAVY=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DCMAKE_CXX_FLAGS="-Werror" \ -DCMAKE_CXX_STANDARD=23 \ -DCMAKE_CXX_COMPILER=g++ \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-warnings-as-errors=*" \ -DCMAKE_BUILD_TYPE=RelWithDebInfo - name: build_and_install_kokkos working-directory: kokkos run: | ccache -z cmake --build build --parallel $(nproc) cmake --install build --prefix install ccache -s - name: test_kokkos working-directory: kokkos/build run: KOKKOS_NUM_THREADS=64 ctest --output-on-failure --timeout 3600 SNL_OPENACC_CUDA_12_2_NVHPC_23_7_CPP20: name: SNL_OPENACC_CUDA_12_2_NVHPC_23_7_CPP20 needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [cuda-12.2_nvhpc-23.7_x86-64-latest] steps: - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | nvidia-smi cd kokkos cmake -B build \ -DCMAKE_CXX_COMPILER=nvc++ \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS="-Werror" \ -DKokkos_ARCH_NATIVE=ON \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_EXAMPLES=ON \ -DKokkos_ENABLE_OPENACC=ON \ -DKokkos_ARCH_VOLTA70=ON \ -DKokkos_ENABLE_DEPRECATED_CODE_5=OFF \ ./ - name: build_and_install_kokkos working-directory: kokkos run: | cmake --build build -j36 cmake --install build --prefix install - name: test_kokkos working-directory: kokkos/build run: ctest --output-on-failure --timeout 3600 SNL_NextSilicon_Latest: name: SNL_NextSilicon_Latest needs: SNL_NeedChecks if: needs.SNL_NeedChecks.outputs.code == 'true' runs-on: [next-latest] steps: - name: Environment Information run: | nextcli --version nextcxx --version cmake --version # Give nextsystemd 20s to get going and check that everything is up - name: Initialize Hardware run: | nextsystemd --ui-collector-address none & sleep 20 nextcli system status nextcli system status | grep "Service: UP" nextcli system status | grep "Maverick 2" nextcli system status | grep "Status: OK" nextcli system terminate - name: checkout_kokkos uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: kokkos/kokkos path: kokkos - name: configure_kokkos run: | cd kokkos cmake -B build \ -DKokkos_ENABLE_NEXTSILICON=ON \ -DKokkos_ENABLE_TESTS=ON \ -DKokkos_ENABLE_COMPILER_WARNINGS=ON \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_TOOLCHAIN_FILE=/opt/nextsilicon/share/cmake/Modules/next-toolchain.cmake \ -DCMAKE_CXX_STANDARD=20 \ -DCMAKE_CXX_FLAGS="-Werror -Wno-ns-unsupported-type" - name: build_kokkos working-directory: kokkos run: | cmake --build build --parallel $(nproc) # the SNL runners map a named volume to $HOME/optimizer-cache for a persistent # optimizer cache across runs. If this doesn't get mapped, nextsystemd will # create this directory and use it as a cache, but the contents will be lost # when the container exits - name: test_kokkos_telemetryless # FIXME_NEXTSILICON: re-enable when telemetry-less mode is working if: false working-directory: kokkos/build env: # FIXME_NEXTSILICON: death tests require fork, not supported by runtime GTEST_FILTER: -*DeathTest* KOKKOS_NEXTSILICON_TEST_TELEMETRYLESS: 1 XDG_CACHE_HOME: $HOME/optimizer-cache __TINYALLOC_HEAP_SIZE: 1073741824 __TINYALLOC_HEAP_MAX_CHUNKS: 4194304 # FIXME_NEXTSILICON: disable core dumps for now run: | ulimit -c 0 ctest -V --timeout 1800 - name: test_kokkos working-directory: kokkos/build env: # FIXME_NEXTSILICON: death tests require fork, not supported by runtime GTEST_FILTER: -*DeathTest* XDG_CACHE_HOME: $HOME/optimizer-cache __TINYALLOC_HEAP_SIZE: 1073741824 __TINYALLOC_HEAP_MAX_CHUNKS: 4194304 # FIXME_NEXTSILICON: disable core dumps for now # FIXME_NEXTSILICON: NextSilicon1A takes 36 minutes to project on 64-core node (1.3.0-84) # so on the SNL CI runner, we'd expect around 2.5 hours. # Kokkos_CoreUnitTest_NextSilicon_SmokeTests: 427 slots, ~34min # Kokkos_CoreUnitTest_NextSilicon2A: 158 slots, ~30min # Kokkos_CoreUnitTest_NextSilicon1A: 723 slots, ~36 minutes to project on 64-core node. # FIXME_NEXTSILICON NextSilicon1A causes memory errors when configuring device run: | ulimit -c 0 ctest -V -E 'NextSilicon1A' --timeout 3600 SNL_Required_Checks: if: always() name: SNL_Required_Checks # bash command to collect this: [grep "name: SNL_" snl-ci.yml | awk '{print " - "$3}'] needs: - SNL_NeedChecks - SNL_CUDA_NVCC_12_2_CPP20 - SNL_HIP_ROCM_6_2_1_CPP23 - SNL_HIP_ROCM_10_0 - SNL_OPENMP_SERIAL_INTEL_2024_2_1 - SNL_SYCL_INTEL_2024_2_1 - SNL_SERIAL_LLVM_14_0_6 - SNL_SERIAL_CLANG_19_MODULES - SNL_HPX_GCC_15_1_1 - SNL_OPENACC_CUDA_12_2_NVHPC_23_7_CPP20 - SNL_NextSilicon_Latest runs-on: ubuntu-latest steps: - name: Require all checks to pass run: | if [[ "${{ needs.SNL_NeedChecks.outputs.code }}" == "true" ]]; then # code changed: no job should be skipped/failed/cancelled if [[ \ "${{ contains(needs.*.result, 'failure') }}" == "true" || \ "${{ contains(needs.*.result, 'cancelled') }}" == "true" || \ "${{ contains(needs.*.result, 'skipped') }}" == "true" \ ]]; then echo "At least one required SNL job did not succeed." exit 1 fi fi echo "All required SNL jobs succeeded."