xref: /libCEED/.gitlab-ci.yml (revision efdfdf6d1fcc8ba9a50fc4afdeed4a17ffbbdc85)
1stages:
2  - test:cpu-and-tidy
3  - test:gpu-and-float
4
5noether-cpu:
6  stage: test:cpu-and-tidy
7  tags:
8    - cpu
9    - rocm
10  interruptible: true
11  before_script:
12# Environment
13    - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc
14    - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
15    - echo "-------------- CC ------------------" && $CC --version
16    - echo "-------------- CXX -----------------" && $CXX --version
17    - echo "-------------- FC ------------------" && $FC --version
18    - echo "-------------- HIPCC ---------------" && $HIPCC --version
19    - echo "-------------- GCOV ----------------" && gcov --version
20# Libraries for backends
21# -- LIBXSMM 44433be9426eddaed88415646c15b3bcc61afc85
22    - cd .. && export XSMM_HASH=44433be9426eddaed88415646c15b3bcc61afc85 && { [[ -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
23    - echo "-------------- LIBXSMM -------------" && basename $XSMM_DIR
24# -- OCCA v1.1.0
25    - cd .. && export OCCA_VERSION=occa-1.4.0 && { [[ -d $OCCA_VERSION ]] || { git clone --depth 1 --branch v1.4.0 https://github.com/libocca/occa.git $OCCA_VERSION && cd $OCCA_VERSION && export ENABLE_OPENCL="OFF" ENABLE_DPCPP="OFF" ENABLE_HIP="OFF" ENABLE_CUDA="OFF" && ./configure-cmake.sh && cmake --build build --parallel $NPROC_CPU && cmake --install build && cd ..; }; } && export OCCA_DIR=$PWD/$OCCA_VERSION/install && cd libCEED
26    - echo "-------------- OCCA ----------------" && git -C $OCCA_DIR describe --tags && LD_LIBRARY_PATH=$OCCA_DIR/lib $OCCA_DIR/bin/occa info
27  script:
28    - rm -f .SUCCESS
29# libCEED
30    - make configure OPT='-O -march=native -ffp-contract=fast'
31    - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*')
32    - echo "-------------- libCEED -------------" && make info
33    - echo "-------------- BACKENDS_CPU --------" && echo $BACKENDS_CPU
34    - make configure OPT='-O -march=native -ffp-contract=fast -Werror'
35    - make -j$NPROC_CPU OCCA_DIR=
36    - make configure OPT='-O -march=native -ffp-contract=fast'
37    - make -j$NPROC_CPU
38# -- libCEED only tests
39    - echo "-------------- core tests ----------"
40    - 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
41#    Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests
42    - export PETSC_DIR= PETSC_ARCH=
43    - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit realsearch=%
44# Libraries for examples
45# -- PETSc with HIP (minimal)
46    - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-hip && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe
47    - echo "-------------- PETSc ---------------" && make -C $PETSC_DIR info
48    - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search="petsc fluids solids"
49# -- MFEM v4.2
50    - cd .. && export MFEM_VERSION=mfem-4.2 && { [[ -d $MFEM_VERSION ]] || { git clone --depth 1 --branch v4.2 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
51    - echo "-------------- MFEM ----------------" && make -C $MFEM_DIR info
52    - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search=mfem
53# -- Nek5000 v19.0
54    - export COVERAGE=0
55    - 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
56    - echo "-------------- Nek5000 -------------" && git -C $NEK5K_DIR describe --tags
57    - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="cpu" junit search=nek NEK5K_DIR=$NEK5K_DIR
58# Clang-tidy
59    - echo "-------------- clang-tidy ----------" && clang-tidy --version
60    - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code
61# Report status
62    - touch .SUCCESS
63  after_script:
64    - |
65      if [ -f .SUCCESS ]; then
66        lcov --directory . --capture --output-file coverage.info;
67        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
68        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
69        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
70        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests;
71        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples;
72      fi
73  artifacts:
74    paths:
75      - build/*.junit
76    reports:
77      junit: build/*.junit
78      performance: performance.json
79
80noether-rocm:
81  stage: test:gpu-and-float
82  tags:
83    - rocm
84  interruptible: true
85  before_script:
86# Environment
87    - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc
88    - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
89    - echo "-------------- CC ------------------" && $CC --version
90    - echo "-------------- CXX -----------------" && $CXX --version
91    - echo "-------------- FC ------------------" && $FC --version
92    - echo "-------------- HIPCC ---------------" && $HIPCC --version
93    - echo "-------------- GCOV ----------------" && gcov --version
94# Libraries for backends
95# -- MAGMA from dev branch
96    - echo "-------------- MAGMA ---------------"
97    - export MAGMA_DIR=/projects/hipMAGMA && git -C $MAGMA_DIR -c safe.directory=$MAGMA_DIR describe
98  script:
99    - rm -f .SUCCESS
100# libCEED
101    - make configure ROCM_DIR=/opt/rocm-5.4.1 OPT='-O -march=native -ffp-contract=fast'
102    - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*') && BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*')
103    - echo "-------------- libCEED -------------" && make info
104    - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU
105    - make -j$NPROC_CPU
106# -- libCEED only tests
107    - echo "-------------- core tests ----------"
108    - 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
109#    Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests
110    - export PETSC_DIR= PETSC_ARCH=
111    - make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="hip" junit realsearch=%
112# Libraries for examples
113# -- PETSc with HIP (minimal)
114    - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-hip && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe
115    - echo "-------------- PETSc ---------------" && make -C $PETSC_DIR info
116    - make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="hip" junit search="petsc fluids solids"
117# -- MFEM v4.2
118    - cd .. && export MFEM_VERSION=mfem-4.2 && { [[ -d $MFEM_VERSION ]] || { git clone --depth 1 --branch v4.2 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
119    - echo "-------------- MFEM ----------------" && make -C $MFEM_DIR info
120    - make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="hip" junit search=mfem
121# -- Nek5000 v19.0
122    - export COVERAGE=0
123    - 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
124    - echo "-------------- Nek5000 -------------" && git -C $NEK5K_DIR describe --tags
125    - make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="hip" junit search=nek NEK5K_DIR=$NEK5K_DIR
126# Clang-tidy
127    - echo "-------------- clang-tidy ----------" && clang-tidy --version
128    - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code
129# Report status
130    - touch .SUCCESS
131  after_script:
132    - |
133      if [ -f .SUCCESS ]; then
134        lcov --directory . --capture --output-file coverage.info;
135        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
136        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
137        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
138        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests;
139        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples;
140      fi
141  artifacts:
142    paths:
143      - build/*.junit
144    reports:
145      junit: build/*.junit
146      performance: performance.json
147
148noether-float:
149  stage: test:gpu-and-float
150  tags:
151    - cpu
152    - rocm
153  interruptible: true
154  before_script:
155# Environment
156    - export COVERAGE=1 CC=gcc CXX=g++ FC= HIPCC=hipcc
157    - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
158    - echo "-------------- CC ------------------" && $CC --version
159    - echo "-------------- CXX -----------------" && $CXX --version
160    - echo "-------------- HIPCC ---------------" && $HIPCC --version
161    - echo "-------------- GCOV ----------------" && gcov --version
162# Libraries for backends
163# -- MAGMA from dev branch
164    - echo "-------------- MAGMA ---------------"
165    - export MAGMA_DIR=/projects/hipMAGMA && git -C $MAGMA_DIR -c safe.directory=$MAGMA_DIR describe
166# -- LIBXSMM 44433be9426eddaed88415646c15b3bcc61afc85
167    - cd .. && export XSMM_HASH=44433be9426eddaed88415646c15b3bcc61afc85 && { [[ -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
168    - echo "-------------- LIBXSMM -------------" && basename $XSMM_DIR
169  script:
170    - rm -f .SUCCESS
171# libCEED
172# Change to single precision
173    - sed -i 's/ceed-f64/ceed-f32/1' include/ceed/types.h
174# Build libCEED
175    - make configure ROCM_DIR=/opt/rocm-5.4.1 OPT='-O -march=native -ffp-contract=fast'
176    - BACKENDS_CPU=$(make info-backends-all | grep -o '/cpu[^ ]*') && BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*')
177    - echo "-------------- libCEED -------------" && make info
178    - echo "-------------- BACKENDS_CPU --------" && echo $BACKENDS_CPU
179    - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU
180    - make -j$NPROC_CPU
181# -- libCEED only tests
182    - echo "-------------- core tests ----------"
183    - 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
184#    Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests
185    - export PETSC_DIR= PETSC_ARCH=
186    - make -k -j$NPROC_CPU BACKENDS="$BACKENDS_CPU" JUNIT_BATCH="float-cpu" junit realsearch=%
187    - make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="float-hip" junit realsearch=%
188# Report status
189    - echo "SUCCESS" > .job_status
190  after_script:
191    - |
192      if [ $(cat .job_status) == "SUCCESS" ]; then
193        lcov --directory . --capture --output-file coverage.info;
194        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
195        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
196        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
197        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests;
198        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples;
199      fi
200    - sed -i 's/ceed-f32/ceed-f64/1' include/ceed/types.h
201  artifacts:
202    paths:
203      - build/*.junit
204    reports:
205      junit: build/*.junit
206      performance: performance.json
207
208noether-cuda:
209  stage: test:gpu-and-float
210  tags:
211    - cuda
212  interruptible: true
213  before_script:
214# Environment
215    - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran NVCC=nvcc
216    - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
217    - echo "-------------- CC ------------------" && $CC --version
218    - echo "-------------- CXX -----------------" && $CXX --version
219    - echo "-------------- FC ------------------" && $FC --version
220    - echo "-------------- NVCC ----------------" && $NVCC --version
221    - echo "-------------- GCOV ----------------" && gcov --version
222  script:
223    - rm -f .SUCCESS
224# libCEED
225    - make configure OPT='-O -march=native -ffp-contract=fast -Werror' CUDA_DIR=/usr
226    - echo "-------------- libCEED -------------" && make info
227    - BACKENDS_GPU=$(make info-backends | grep -o '/gpu[^ ]*')
228    - echo "-------------- BACKENDS_GPU --------" && echo $BACKENDS_GPU
229    - nice make -k -j$NPROC_CPU -l$NPROC_CPU
230# -- libCEED only tests
231    - echo "-------------- core tests ----------"
232#    Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests
233    - export PETSC_DIR= PETSC_ARCH=
234    - nice make -k -j$NPROC_GPU BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit realsearch=%
235# Libraries for examples
236# -- PETSc with CUDA (minimal)
237    - 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
238    - echo "-------------- PETSc ---------------" && make -C $PETSC_DIR info
239    - nice make -k -j$NPROC_GPU JUNIT_BATCH="cuda" junit BACKENDS="$BACKENDS_GPU" search="petsc fluids solids"
240# Report status
241    - touch .SUCCESS
242  after_script:
243    - |
244      if [ -f .SUCCESS ]; then
245        lcov --directory . --capture --output-file coverage.info;
246        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
247        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
248        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
249        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests;
250        bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples;
251      fi
252  artifacts:
253    paths:
254      - build/*.junit
255    reports:
256      junit: build/*.junit
257