1# ---------------------------------------------------------------------------------------- 2# libCEED GitLab CI 3# ---------------------------------------------------------------------------------------- 4stages: 5 - test:cpu-and-tidy 6 - test:gpu-and-float 7 8workflow: 9 auto_cancel: 10 on_job_failure: all 11 12 13# ---------------------------------------------------------------------------------------- 14# Memcheck backends + ASAN 15# ---------------------------------------------------------------------------------------- 16noether-asan: 17 stage: test:cpu-and-tidy 18 tags: 19 - cpu 20 interruptible: true 21 before_script: 22 # Environment 23 # Note: COVERAGE=0 is needed when using ASAN 24 - export COVERAGE=0 CC=gcc CXX=g++ FC=gfortran 25 - export NPROC_POOL=8 26 - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 27 - echo "-------------- CC ------------------" && $CC --version 28 - echo "-------------- CXX -----------------" && $CXX --version 29 - echo "-------------- FC ------------------" && $FC --version 30 # ASAN 31 - echo "-------------- ASAN ----------------" 32 - export ASAN=1 AFLAGS="-fsanitize=address -fsanitize=leak" 33 - echo $AFLAGS 34 script: 35 - rm -f .SUCCESS 36 # libCEED 37 - make configure OPT='-O -march=native -ffp-contract=fast' 38 - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*' | tr '\n' ' ') 39 - echo "-------------- libCEED -------------" && make info 40 - echo "-------------- BACKENDS_CPU --------" && echo $BACKENDS_CPU 41 - make clean 42 - make -j$NPROC_CPU 43 # -- libCEED only tests 44 - echo "-------------- core tests ----------" 45 - echo '[{"subject":"/","metrics":[{"name":"Transfer Size (KB)","value":"19.5","desiredSize":"smaller"},{"name":"Speed Index","value":0,"desiredSize":"smaller"},{"name":"Total Score","value":92,"desiredSize":"larger"},{"name":"Requests","value":4,"desiredSize":"smaller"}]}]' > performance.json 46 # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests 47 - export PETSC_DIR= PETSC_ARCH= 48 - make -k -j$((NPROC_CPU / NPROC_POOL)) BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="memcheck" junit realsearch=% 49 # Clang-tidy 50 - echo "-------------- clang-tidy ----------" && clang-tidy --version 51 - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code 52 # Report status 53 - touch .SUCCESS 54 artifacts: 55 paths: 56 - build/*.junit 57 reports: 58 junit: build/*.junit 59 performance: performance.json 60 61 62# ---------------------------------------------------------------------------------------- 63# CPU backends only + make tidy 64# ---------------------------------------------------------------------------------------- 65noether-cpu: 66 stage: test:cpu-and-tidy 67 tags: 68 - cpu 69 interruptible: true 70 before_script: 71 # Environment 72 - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran 73 - export NPROC_POOL=8 74 - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 75 - echo "-------------- CC ------------------" && $CC --version 76 - echo "-------------- CXX -----------------" && $CXX --version 77 - echo "-------------- FC ------------------" && $FC --version 78 - echo "-------------- GCOV ----------------" && gcov --version 79 # Libraries for backends 80 # -- LIBXSMM 7 April 2024 81 - cd .. && export XSMM_HASH=94ee71576870152feb62f3f0cf6b061d036dcdb5 && { [[ -d libxsmm-$XSMM_HASH ]] || { curl -L https://github.com/libxsmm/libxsmm/archive/$XSMM_HASH.tar.gz -o xsmm.tar.gz && tar zvxf xsmm.tar.gz && rm xsmm.tar.gz && make -C libxsmm-$XSMM_HASH -j$(nproc); }; } && export XSMM_DIR=$PWD/libxsmm-$XSMM_HASH && cd libCEED 82 - echo "-------------- LIBXSMM -------------" && basename $XSMM_DIR 83 script: 84 - rm -f .SUCCESS 85 # libCEED 86 - make configure OPT='-O -march=native -ffp-contract=fast' 87 - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*' | tr '\n' ' ') 88 - echo "-------------- libCEED -------------" && make info 89 - echo "-------------- BACKENDS_CPU --------" && echo $BACKENDS_CPU 90 - make clean 91 - PEDANTIC=1 make -j$NPROC_CPU 92 - make -j$NPROC_CPU 93 # -- libCEED only tests 94 - echo "-------------- core tests ----------" 95 - echo '[{"subject":"/","metrics":[{"name":"Transfer Size (KB)","value":"19.5","desiredSize":"smaller"},{"name":"Speed Index","value":0,"desiredSize":"smaller"},{"name":"Total Score","value":92,"desiredSize":"larger"},{"name":"Requests","value":4,"desiredSize":"smaller"}]}]' > performance.json 96 # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests 97 - export PETSC_DIR= PETSC_ARCH= 98 - make -k -j$((NPROC_CPU / NPROC_POOL)) BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit realsearch=% 99 # Libraries for examples 100 # -- PETSc (minimal) 101 - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-cpu-int64 && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe 102 - echo "-------------- PETSc ---------------" && make -C $PETSC_DIR info 103 - make -k -j$((NPROC_CPU / NPROC_POOL)) BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search="petsc fluids-navierstokes solids" 104 # -- MFEM v4.7 105 - cd .. && export MFEM_VERSION=mfem-4.7 && { [[ -d $MFEM_VERSION ]] || { git clone --depth 1 --branch v4.7 https://github.com/mfem/mfem.git $MFEM_VERSION && make -C $MFEM_VERSION -j$(nproc) serial CXXFLAGS="-O -std=c++11"; }; } && export MFEM_DIR=$PWD/$MFEM_VERSION && cd libCEED 106 - echo "-------------- MFEM ----------------" && make -C $MFEM_DIR info 107 - make -k -j$((NPROC_CPU / NPROC_POOL)) BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search=mfem 108 # -- Nek5000 v19.0 109 - export COVERAGE=0 110 - cd .. && export NEK5K_VERSION=Nek5000-19.0 && { [[ -d $NEK5K_VERSION ]] || { git clone --depth 1 --branch v19.0 https://github.com/Nek5000/Nek5000.git $NEK5K_VERSION && cd $NEK5K_VERSION/tools && ./maketools genbox genmap reatore2 && cd ../..; }; } && export NEK5K_DIR=$PWD/$NEK5K_VERSION && export PATH=$NEK5K_DIR/bin:$PATH MPI=0 && cd libCEED 111 - echo "-------------- Nek5000 -------------" && git -C $NEK5K_DIR describe --tags 112 - export NPROC_POOL=1 113 - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search=nek NEK5K_DIR=$NEK5K_DIR 114 # -- deal.II 8bd5c262f13e15793aa206b6eed8774a9b25ce11 115 - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*' | tr '\n' ' ') 116 - export DEAL_II_ROOT_DIR=/projects/dealii DEAL_II_DIR=/projects/dealii/install 117 - echo "-------------- deal.II -------------" && git -C $DEAL_II_ROOT_DIR -c safe.directory=$DEAL_II_ROOT_DIR describe --always 118 - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search=dealii DEAL_II_DIR=$DEAL_II_DIR 119 # Report status 120 - touch .SUCCESS 121 after_script: 122 - | 123 if [ -f .SUCCESS ]; then 124 lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; 125 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; 126 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; 127 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; 128 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests; 129 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples; 130 fi 131 artifacts: 132 paths: 133 - build/*.junit 134 reports: 135 junit: build/*.junit 136 performance: performance.json 137 138 139# ---------------------------------------------------------------------------------------- 140# Check SYCL backends build 141# ---------------------------------------------------------------------------------------- 142 143# SYCL tests currently disabled 144 145#noether-sycl: 146# stage: test:gpu-and-float 147# tags: 148# - sycl 149# interruptible: true 150# before_script: 151# # Environment 152# - . /opt/intel/oneapi/setvars.sh 153# - export COVERAGE=1 CC=icx CXX=icpx 154# - export NPROC_POOL=8 155# - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 156# - echo "-------------- CC ------------------" && $CC --version 157# - echo "-------------- CXX -----------------" && $CXX --version 158# script: 159# - rm -f .SUCCESS 160# # libCEED 161# - make configure SYCL_DIR=/opt/intel/oneapi/compiler/latest OPT='-O -march=native -ffp-contract=fast' 162# - BACKENDS_SYCL=$(make info-backends-all | grep -o '/sycl[^ ]*' | tr '\n' ' ') 163# - echo "-------------- libCEED -------------" && make info 164# - echo "-------------- BACKENDS_SYCL -------" && echo $BACKENDS_SYCL 165# - make clean 166# - make -j$NPROC_CPU 167# # Report status 168# - touch .SUCCESS 169 170 171# ---------------------------------------------------------------------------------------- 172# Rust + CUDA 173# ---------------------------------------------------------------------------------------- 174noether-rust-qfunctions: 175 stage: test:gpu-and-float 176 tags: 177 - cuda 178 interruptible: true 179 before_script: 180 # Environment 181 - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran NVCC=nvcc GPU_CLANG=1 182 - export NPROC_POOL=1 183 - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 184 - echo "-------------- CC ------------------" && $CC --version 185 - echo "-------------- CXX -----------------" && $CXX --version 186 - echo "-------------- FC ------------------" && $FC --version 187 - echo "-------------- NVCC ----------------" && $NVCC --version 188 - echo "-------------- Rustc ---------------" && rustc --version 189 - echo "-------------- Clang++ -------------" && clang++ --version 190 - echo "-------------- GCOV ----------------" && gcov --version 191 script: 192 - rm -f .SUCCESS 193 # Rustup 194 - rustup update nightly 195 - rustup component add rust-src --toolchain nightly 196 - rustup component add llvm-tools --toolchain nightly 197 # libCEED 198 - make configure OPT='-O -march=native -ffp-contract=fast' CUDA_DIR=/usr/local/cuda-12.9 199 - echo "-------------- libCEED -------------" && make info 200 - make clean 201 - make -k -j$NPROC_CPU -l$NPROC_CPU 202 # -- libCEED only tests 203 - echo "-------------- Rust QFunction tests -----" 204 # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests 205 - export PETSC_DIR= PETSC_ARCH= 206 - make -k -j$((NPROC_GPU / NPROC_POOL)) JUNIT_BATCH="rust-qfunction" junit search=rustqfunction 207 # Report status 208 - touch .SUCCESS 209 after_script: 210 - | 211 if [ -f .SUCCESS ]; then 212 lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; 213 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; 214 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; 215 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; 216 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests; 217 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples; 218 fi 219 artifacts: 220 paths: 221 - build/*.junit 222 reports: 223 junit: build/*.junit 224 225 226# ---------------------------------------------------------------------------------------- 227# CUDA backends 228# ---------------------------------------------------------------------------------------- 229noether-cuda: 230 stage: test:gpu-and-float 231 tags: 232 - cuda 233 interruptible: true 234 before_script: 235 # Environment 236 - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran NVCC=nvcc 237 - export NPROC_POOL=4 238 - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 239 - echo "-------------- CC ------------------" && $CC --version 240 - echo "-------------- CXX -----------------" && $CXX --version 241 - echo "-------------- FC ------------------" && $FC --version 242 - echo "-------------- NVCC ----------------" && $NVCC --version 243 - echo "-------------- GCOV ----------------" && gcov --version 244 # ASAN 245 - echo "-------------- ASAN ----------------" 246 - export ASAN=1 AFLAGS="-fsanitize=address -fsanitize=leak" ASAN_OPTIONS=protect_shadow_gap=0 247 - echo $AFLAGS 248 script: 249 - rm -f .SUCCESS 250 # libCEED 251 - make configure OPT='-O -march=native -ffp-contract=fast' CUDA_DIR=/usr/local/cuda-12.9 252 - echo "-------------- libCEED -------------" && make info 253 - BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*' | tr '\n' ' ') 254 - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU 255 - make clean 256 - PEDANTIC=1 make -k -j$NPROC_CPU -l$NPROC_CPU 257 # -- libCEED only tests 258 - echo "-------------- core tests ----------" 259 # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests 260 - export PETSC_DIR= PETSC_ARCH= 261 - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit realsearch=% 262 # Rebuild without ASAN 263 - unset ASAN AFLAGS ASAN_OPTIONS 264 - make clean 265 - PEDANTIC=1 make -k -j$NPROC_CPU -l$NPROC_CPU 266 # Libraries for examples 267 # -- PETSc with CUDA (minimal) 268 - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-cuda-O PETSC_OPTIONS='-use_gpu_aware_mpi 0' && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe 269 - echo "-------------- PETSc ---------------" && make -C $PETSC_DIR info 270 - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit search="petsc fluids solids" 271 # -- MFEM v4.7 272 - cd .. && export MFEM_VERSION=mfem-4.7 && { [[ -d $MFEM_VERSION ]] || { git clone --depth 1 --branch v4.7 https://github.com/mfem/mfem.git $MFEM_VERSION && make -C $MFEM_VERSION -j$(nproc) serial CXXFLAGS="-O -std=c++11"; }; } && export MFEM_DIR=$PWD/$MFEM_VERSION && cd libCEED 273 - echo "-------------- MFEM ----------------" && make -C $MFEM_DIR info 274 - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit search=mfem 275 # -- Nek5000 v19.0 276 - export COVERAGE=0 277 - cd .. && export NEK5K_VERSION=Nek5000-19.0 && { [[ -d $NEK5K_VERSION ]] || { git clone --depth 1 --branch v19.0 https://github.com/Nek5000/Nek5000.git $NEK5K_VERSION && cd $NEK5K_VERSION/tools && ./maketools genbox genmap reatore2 && cd ../..; }; } && export NEK5K_DIR=$PWD/$NEK5K_VERSION && export PATH=$NEK5K_DIR/bin:$PATH MPI=0 && cd libCEED 278 - echo "-------------- Nek5000 -------------" && git -C $NEK5K_DIR describe --tags 279 - export NPROC_POOL=1 280 - make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit search=nek NEK5K_DIR=$NEK5K_DIR 281 # -- deal.II 8bd5c262f13e15793aa206b6eed8774a9b25ce11 282 - export DEAL_II_ROOT_DIR=/projects/dealii DEAL_II_DIR=/projects/dealii/install 283 - echo "-------------- deal.II -------------" && git -C $DEAL_II_ROOT_DIR -c safe.directory=$DEAL_II_ROOT_DIR describe --always 284 - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit search=dealii DEAL_II_DIR=$DEAL_II_DIR 285 # Clang-tidy 286 - echo "-------------- clang-tidy ----------" && clang-tidy --version 287 - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code 288 # Report status 289 - touch .SUCCESS 290 after_script: 291 - | 292 if [ -f .SUCCESS ]; then 293 lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; 294 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; 295 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; 296 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; 297 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests; 298 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples; 299 fi 300 artifacts: 301 paths: 302 - build/*.junit 303 reports: 304 junit: build/*.junit 305 306 307# ---------------------------------------------------------------------------------------- 308# ROCm backends 309# ---------------------------------------------------------------------------------------- 310 311# ROCm test execution currently disabled 312 313#noether-rocm: 314# stage: test:gpu-and-float 315# tags: 316# - rocm 317# interruptible: true 318# before_script: 319# # Environment 320# - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc 321# - export NPROC_POOL=4 322# - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 323# - echo "-------------- CC ------------------" && $CC --version 324# - echo "-------------- CXX -----------------" && $CXX --version 325# - echo "-------------- FC ------------------" && $FC --version 326# - echo "-------------- HIPCC ---------------" && $HIPCC --version 327# - echo "-------------- GCOV ----------------" && gcov --version 328# # Libraries for backends 329# # -- MAGMA from dev branch 330# - echo "-------------- MAGMA ---------------" 331# - export MAGMA_DIR=/projects/hipMAGMA && git -C $MAGMA_DIR -c safe.directory=$MAGMA_DIR describe 332# script: 333# - rm -f .SUCCESS 334# # libCEED 335# - make configure ROCM_DIR=/opt/rocm-6.3.0 OPT='-O -march=native -ffp-contract=fast' 336# - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*' | tr '\n' ' ') && BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*' | tr '\n' ' ') 337# - echo "-------------- libCEED -------------" && make info 338# - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU 339# - make clean 340# - make -j$NPROC_CPU 341# # -- libCEED only tests 342# - echo "-------------- core tests ----------" 343# - echo '[{"subject":"/","metrics":[{"name":"Transfer Size (KB)","value":"19.5","desiredSize":"smaller"},{"name":"Speed Index","value":0,"desiredSize":"smaller"},{"name":"Total Score","value":92,"desiredSize":"larger"},{"name":"Requests","value":4,"desiredSize":"smaller"}]}]' > performance.json 344# # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests 345# - export PETSC_DIR= PETSC_ARCH= 346# - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="hip" junit realsearch=% 347# # Libraries for examples 348# # -- PETSc with HIP (minimal) 349# - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-hip && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe 350# - echo "-------------- PETSc ---------------" && make -C $PETSC_DIR info 351# - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="hip" junit search="petsc fluids solids" 352# # Clang-tidy 353# - echo "-------------- clang-tidy ----------" && clang-tidy --version 354# - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code 355# # Report status 356# - touch .SUCCESS 357# after_script: 358# - | 359# if [ -f .SUCCESS ]; then 360# lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; 361# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; 362# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; 363# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; 364# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests; 365# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples; 366# fi 367# artifacts: 368# paths: 369# - build/*.junit 370# reports: 371# junit: build/*.junit 372# performance: performance.json 373 374 375noether-rocm: 376 stage: test:gpu-and-float 377 tags: 378 - rocm 379 interruptible: true 380 before_script: 381 # Environment 382 - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc 383 - export NPROC_POOL=4 384 - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 385 - echo "-------------- CC ------------------" && $CC --version 386 - echo "-------------- CXX -----------------" && $CXX --version 387 - echo "-------------- FC ------------------" && $FC --version 388 - echo "-------------- HIPCC ---------------" && $HIPCC --version 389 - echo "-------------- GCOV ----------------" && gcov --version 390 # Libraries for backends 391 # -- MAGMA from dev branch 392 - echo "-------------- MAGMA ---------------" 393 - export MAGMA_DIR=/projects/hipMAGMA && git -C $MAGMA_DIR -c safe.directory=$MAGMA_DIR describe 394 script: 395 - rm -f .SUCCESS 396 # libCEED 397 - make configure ROCM_DIR=/opt/rocm-6.3.0 OPT='-O -march=native -ffp-contract=fast' 398 - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*' | tr '\n' ' ') && BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*' | tr '\n' ' ') 399 - echo "-------------- libCEED -------------" && make info 400 - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU 401 - make clean 402 - make -j$NPROC_CPU 403 # Clang-tidy 404 - echo "-------------- clang-tidy ----------" && clang-tidy --version 405 - make clean 406 - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code 407 # Report status 408 - touch .SUCCESS 409 410 411# ---------------------------------------------------------------------------------------- 412# CPU + CUDA backends with CeedScalar == float (32 bit) 413# ---------------------------------------------------------------------------------------- 414noether-float: 415 stage: test:gpu-and-float 416 tags: 417 - cpu 418 - cuda 419 interruptible: true 420 before_script: 421 # Environment 422 - export COVERAGE=1 CC=gcc CXX=g++ FC= NVCC=nvcc 423 - export NPROC_POOL=8 424 - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU 425 - echo "-------------- CC ------------------" && $CC --version 426 - echo "-------------- CXX -----------------" && $CXX --version 427 - echo "-------------- NVCC ----------------" && $NVCC --version 428 - echo "-------------- GCOV ----------------" && gcov --version 429 # Libraries for backends 430# ROCm tests currently disabled 431# -- MAGMA from dev branch 432# - echo "-------------- MAGMA ---------------" 433# - export MAGMA_DIR=/projects/hipMAGMA && git -C $MAGMA_DIR -c safe.directory=$MAGMA_DIR describe 434 # -- LIBXSMM 19 March 2025 435 - cd .. && export XSMM_HASH=ba9d6bc69c421c10f0597d582ea1ace6a6126308 && { [[ -d libxsmm-$XSMM_HASH ]] || { curl -L https://github.com/libxsmm/libxsmm/archive/$XSMM_HASH.tar.gz -o xsmm.tar.gz && tar zvxf xsmm.tar.gz && rm xsmm.tar.gz && make -C libxsmm-$XSMM_HASH -j$(nproc); }; } && export XSMM_DIR=$PWD/libxsmm-$XSMM_HASH && cd libCEED 436 - echo "-------------- LIBXSMM -------------" && basename $XSMM_DIR 437 script: 438 - rm -f .SUCCESS 439 # libCEED 440 # Change to single precision 441 - sed -i 's/ceed-f64/ceed-f32/1' include/ceed/types.h 442 # Build libCEED 443 - make configure OPT='-O -march=native -ffp-contract=fast' CUDA_DIR=/usr/local/cuda-12.9 444 - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*' | tr '\n' ' ') && BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*' | tr '\n' ' ') 445 - echo "-------------- libCEED -------------" && make info 446 - echo "-------------- BACKENDS_CPU --------" && echo $BACKENDS_CPU 447 - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU 448 - make clean 449 - make -j$NPROC_CPU 450 # -- libCEED only tests 451 - echo "-------------- core tests ----------" 452 - echo '[{"subject":"/","metrics":[{"name":"Transfer Size (KB)","value":"19.5","desiredSize":"smaller"},{"name":"Speed Index","value":0,"desiredSize":"smaller"},{"name":"Total Score","value":92,"desiredSize":"larger"},{"name":"Requests","value":4,"desiredSize":"smaller"}]}]' > performance.json 453 # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests 454 - export PETSC_DIR= PETSC_ARCH= 455 - make -k -j$((NPROC_CPU / NPROC_POOL)) BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="float-cpu" junit realsearch=% 456 - export NPROC_POOL=4 457 - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="float-cuda" junit realsearch=% 458 # Report status 459 - echo "SUCCESS" > .job_status 460 after_script: 461 - | 462 if [ $(cat .job_status) == "SUCCESS" ]; then 463 lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; 464 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; 465 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; 466 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; 467 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests; 468 bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples; 469 fi 470 - sed -i 's/ceed-f32/ceed-f64/1' include/ceed/types.h 471 artifacts: 472 paths: 473 - build/*.junit 474 reports: 475 junit: build/*.junit 476 performance: performance.json 477