Skip to content

Commit b3a08a8

Browse files
authored
Merge pull request #1966 from CEED/jeremy/cuda-clang
Allow user set CUDA Clang
2 parents 81fd46c + 7d38473 commit b3a08a8

6 files changed

Lines changed: 151 additions & 99 deletions

File tree

.gitlab-ci.yml

Lines changed: 72 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,14 @@ noether-cpu:
6969
interruptible: true
7070
before_script:
7171
# Environment
72-
- export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran
72+
- export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran GCOV=gcov
7373
- export NPROC_POOL=8
7474
- echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
7575
- echo "-------------- CC ------------------" && $CC --version
7676
- echo "-------------- CXX -----------------" && $CXX --version
7777
- echo "-------------- FC ------------------" && $FC --version
78-
- echo "-------------- GCOV ----------------" && gcov --version
78+
- echo "-------------- GCOV ----------------" && $GCOV --version
79+
- echo "GCOV=$GCOV" > job.env
7980
# Libraries for backends
8081
# -- LIBXSMM 7 April 2024
8182
- 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
@@ -120,7 +121,8 @@ noether-cpu:
120121
after_script:
121122
- |
122123
if [ -f .SUCCESS ]; then
123-
lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch;
124+
source job.env;
125+
lcov --directory . --capture --gcov-tool $GCOV --output-file coverage.info --ignore-errors source,mismatch;
124126
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
125127
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
126128
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
@@ -170,54 +172,55 @@ noether-cpu:
170172
# ----------------------------------------------------------------------------------------
171173
# Rust + CUDA
172174
# ----------------------------------------------------------------------------------------
173-
#noether-rust-qfunctions:
174-
# stage: test:gpu-and-float
175-
# tags:
176-
# - cuda
177-
# interruptible: true
178-
# before_script:
179-
# # Environment
180-
# - export COVERAGE=1 CC=gcc-14 CXX=g++-14 FC=gfortran-14 NVCC=nvcc GPU_CLANG=1
181-
# - export NPROC_POOL=1
182-
# - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
183-
# - echo "-------------- CC ------------------" && $CC --version
184-
# - echo "-------------- CXX -----------------" && $CXX --version
185-
# - echo "-------------- FC ------------------" && $FC --version
186-
# - echo "-------------- NVCC ----------------" && $NVCC --version
187-
# - echo "-------------- Rustc ---------------" && rustc --version
188-
# - echo "-------------- Clang++ -------------" && clang++ --version
189-
# - echo "-------------- GCOV ----------------" && gcov-14 --version
190-
# script:
191-
# - rm -f .SUCCESS
192-
# # Rustup
193-
# - rustup update nightly
194-
# - rustup component add rust-src --toolchain nightly
195-
# - rustup component add llvm-tools --toolchain nightly
196-
# # libCEED
197-
# - make configure OPT='-g -O0 -fno-inline -march=native -ffp-contract=fast' CUDA_DIR=/usr/local/cuda-12.9
198-
# - echo "-------------- libCEED -------------" && make info
199-
# - make clean
200-
# - make -k -j$NPROC_CPU -l$NPROC_CPU
201-
# # -- libCEED only tests
202-
# - echo "-------------- Rust QFunction tests -----"
203-
# # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests
204-
# - export PETSC_DIR= PETSC_ARCH=
205-
# - make -k -j$((NPROC_GPU / NPROC_POOL)) JUNIT_BATCH="rust-qfunction" junit search=rustqfunction
206-
# # Report status
207-
# - touch .SUCCESS
208-
# after_script:
209-
# - |
210-
# if [ -f .SUCCESS ]; then
211-
# lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch;
212-
# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
213-
# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
214-
# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
215-
# fi
216-
# artifacts:
217-
# paths:
218-
# - build/*.junit
219-
# reports:
220-
# junit: build/*.junit
175+
noether-rust-qfunctions:
176+
stage: test:gpu-and-float
177+
tags:
178+
- cuda
179+
interruptible: true
180+
before_script:
181+
# Environment
182+
- export COVERAGE=1 CC=gcc-14 CXX=g++-14 FC=gfortran-14 NVCC=nvcc GCOV=gcov-14 CEED_USE_CLANG_CUDA=1
183+
- export NPROC_POOL=1
184+
- echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
185+
- echo "-------------- CC ------------------" && $CC --version
186+
- echo "-------------- CXX -----------------" && $CXX --version
187+
- echo "-------------- FC ------------------" && $FC --version
188+
- echo "-------------- NVCC ----------------" && $NVCC --version
189+
- echo "-------------- Rustc ---------------" && rustc --version
190+
- echo "-------------- GCOV ----------------" && $GCOV --version
191+
- echo "GCOV=$GCOV" > job.env
192+
script:
193+
- rm -f .SUCCESS
194+
# Rustup
195+
- rustup update nightly
196+
- rustup component add rust-src --toolchain nightly
197+
- rustup component add llvm-tools --toolchain nightly
198+
# libCEED
199+
- make configure OPT='-g -O0 -fno-inline -march=native -ffp-contract=fast' CUDA_DIR=/usr/local/cuda-12.9
200+
- echo "-------------- libCEED -------------" && make info
201+
- make clean
202+
- make -k -j$NPROC_CPU -l$NPROC_CPU
203+
# -- libCEED only tests
204+
- echo "-------------- Rust QFunction tests -----"
205+
# Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests
206+
- export PETSC_DIR= PETSC_ARCH=
207+
- make -k -j$((NPROC_GPU / NPROC_POOL)) JUNIT_BATCH="rust-qfunction" junit search=rustqfunction
208+
# Report status
209+
- touch .SUCCESS
210+
after_script:
211+
- |
212+
if [ -f .SUCCESS ]; then
213+
source job.env;
214+
lcov --directory . --capture --gcov-tool $GCOV --output-file coverage.info --ignore-errors source,mismatch;
215+
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
216+
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
217+
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
218+
fi
219+
artifacts:
220+
paths:
221+
- build/*.junit
222+
reports:
223+
junit: build/*.junit
221224

222225

223226
# ----------------------------------------------------------------------------------------
@@ -230,14 +233,15 @@ noether-cuda:
230233
interruptible: true
231234
before_script:
232235
# Environment
233-
- export COVERAGE=1 CC=gcc-14 CXX=g++-14 FC=gfortran-14 NVCC=nvcc
236+
- export COVERAGE=1 CC=gcc-14 CXX=g++-14 FC=gfortran-14 NVCC=nvcc GCOV=gcov-14
234237
- export NPROC_POOL=4
235238
- echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
236239
- echo "-------------- CC ------------------" && $CC --version
237240
- echo "-------------- CXX -----------------" && $CXX --version
238241
- echo "-------------- FC ------------------" && $FC --version
239242
- echo "-------------- NVCC ----------------" && $NVCC --version
240-
- echo "-------------- GCOV ----------------" && gcov-14 --version
243+
- echo "-------------- GCOV ----------------" && $GCOV --version
244+
- echo "GCOV=$GCOV" > job.env
241245
# ASAN
242246
- echo "-------------- ASAN ----------------"
243247
- export ASAN=1 AFLAGS="-fsanitize=address -fsanitize=leak" ASAN_OPTIONS=protect_shadow_gap=0
@@ -290,7 +294,8 @@ noether-cuda:
290294
after_script:
291295
- |
292296
if [ -f .SUCCESS ]; then
293-
lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch;
297+
source job.env;
298+
lcov --directory . --capture --gcov-tool $GCOV --output-file coverage.info --ignore-errors source,mismatch;
294299
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
295300
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
296301
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
@@ -317,14 +322,15 @@ noether-cuda:
317322
# interruptible: true
318323
# before_script:
319324
# # Environment
320-
# - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc
325+
# - export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc GCOV=gcov
321326
# - export NPROC_POOL=4
322327
# - echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
323328
# - echo "-------------- CC ------------------" && $CC --version
324329
# - echo "-------------- CXX -----------------" && $CXX --version
325330
# - echo "-------------- FC ------------------" && $FC --version
326331
# - echo "-------------- HIPCC ---------------" && $HIPCC --version
327-
# - echo "-------------- GCOV ----------------" && gcov --version
332+
# - echo "-------------- GCOV ----------------" && $GCOV --version
333+
# - echo "GCOV=$GCOV" > job.env
328334
# # Libraries for backends
329335
# # -- MAGMA from dev branch
330336
# - echo "-------------- MAGMA ---------------"
@@ -357,7 +363,8 @@ noether-cuda:
357363
# after_script:
358364
# - |
359365
# if [ -f .SUCCESS ]; then
360-
# lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch;
366+
# source job.env;
367+
# lcov --directory . --capture --gcov-tool $GCOV --output-file coverage.info --ignore-errors source,mismatch;
361368
# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
362369
# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
363370
# bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;
@@ -379,14 +386,15 @@ noether-rocm:
379386
interruptible: true
380387
before_script:
381388
# Environment
382-
- export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc
389+
- export COVERAGE=1 CC=gcc CXX=g++ FC=gfortran HIPCC=hipcc GCOV=gcov
383390
- export NPROC_POOL=4
384391
- echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
385392
- echo "-------------- CC ------------------" && $CC --version
386393
- echo "-------------- CXX -----------------" && $CXX --version
387394
- echo "-------------- FC ------------------" && $FC --version
388395
- echo "-------------- HIPCC ---------------" && $HIPCC --version
389-
- echo "-------------- GCOV ----------------" && gcov --version
396+
- echo "-------------- GCOV ----------------" && $GCOV --version
397+
- echo "GCOV=$GCOV" > job.env
390398
# Libraries for backends
391399
# -- MAGMA from dev branch
392400
- echo "-------------- MAGMA ---------------"
@@ -418,13 +426,14 @@ noether-float:
418426
interruptible: true
419427
before_script:
420428
# Environment
421-
- export COVERAGE=1 CC=gcc-14 CXX=g++-14 FC= NVCC=nvcc
429+
- export COVERAGE=1 CC=gcc-14 CXX=g++-14 FC= NVCC=nvcc GCOV=gcov-14
422430
- export NPROC_POOL=8
423431
- echo "-------------- nproc ---------------" && NPROC_CPU=$(nproc) && NPROC_GPU=$(($(nproc)<8?$(nproc):8)) && echo "NPROC_CPU" $NPROC_CPU && echo "NPROC_GPU" $NPROC_GPU
424432
- echo "-------------- CC ------------------" && $CC --version
425433
- echo "-------------- CXX -----------------" && $CXX --version
426434
- echo "-------------- NVCC ----------------" && $NVCC --version
427-
- echo "-------------- GCOV ----------------" && gcov-14 --version
435+
- echo "-------------- GCOV ----------------" && $GCOV --version
436+
- echo "GCOV=$GCOV" > job.env
428437
# Libraries for backends
429438
# ROCm tests currently disabled
430439
# -- MAGMA from dev branch
@@ -459,7 +468,8 @@ noether-float:
459468
after_script:
460469
- |
461470
if [ $(cat .job_status) == "SUCCESS" ]; then
462-
lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch;
471+
source job.env;
472+
lcov --directory . --capture --gcov-tool $GCOV --output-file coverage.info --ignore-errors source,mismatch;
463473
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface;
464474
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery;
465475
bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends;

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ external_examples := \
799799
$(if $(DEAL_II_DIR),$(dealiiexamples)) \
800800
$(if $(PETSC_DIR),$(fluidsexamples)) \
801801
$(if $(PETSC_DIR),$(solidsexamples)) \
802-
$(if $(or $(RUST_QF),$(GPU_CLANG)),$(rustqfunctionsexamples))
802+
$(if $(or $(CEED_USE_CLANG_CUDA),$(CEED_CLANG_CUDA_CXX)),$(rustqfunctionsexamples))
803803

804804
allexamples = $(examples) $(external_examples)
805805

backends/cuda/ceed-cuda-common.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ int CeedDestroy_Cuda(Ceed ceed) {
4242

4343
CeedCallBackend(CeedGetData(ceed, &data));
4444
if (data->cublas_handle) CeedCallCublas(ceed, cublasDestroy(data->cublas_handle));
45+
CeedCallBackend(CeedFree(&data->llvm_cxx));
4546
CeedCallBackend(CeedFree(&data));
4647
return CEED_ERROR_SUCCESS;
4748
}

backends/cuda/ceed-cuda-common.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ static const char *cublasGetErrorName(cublasStatus_t error) {
6666

6767
typedef struct {
6868
int device_id;
69-
bool use_llvm_version;
70-
int llvm_version;
69+
char *llvm_cxx;
7170
cublasHandle_t cublas_handle;
7271
struct cudaDeviceProp device_prop;
7372
} Ceed_Cuda;

0 commit comments

Comments
 (0)