Skip to content

Update Cuda CI based on amrex and ERF #1678

Update Cuda CI based on amrex and ERF

Update Cuda CI based on amrex and ERF #1678

Workflow file for this run

name: cuda
on: [push, pull_request]
jobs:
# Build libamrex and all tests with CUDA 9.2
# tests-cuda9:
# name: CUDA@9.2 GNU@6.5.0 C++14 Release [tests]
# runs-on: ubuntu-18.04
# env: {CXXFLAGS: "-fno-operator-names -Werror -Wall -Wextra -Wpedantic -Wnull-dereference -Wfloat-conversion -Wshadow -Woverloaded-virtual -Wunreachable-code"}
# steps:
# - uses: actions/checkout@v2
# - name: Dependencies
# run: .github/workflows/dependencies/dependencies_nvcc9.sh
# - name: Build & Install
# run: |
# export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
# export LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
# which nvcc || echo "nvcc not in PATH!"
# mkdir build
# cd build
# cmake .. \
# -DCMAKE_VERBOSE_MAKEFILE=ON \
# -DAMReX_ENABLE_TESTS=ON \
# -DAMReX_FORTRAN=OFF \
# -DAMReX_PARTICLES=ON \
# -DAMReX_GPU_BACKEND=CUDA \
# -DCMAKE_C_COMPILER=$(which gcc-6) \
# -DCMAKE_CXX_COMPILER=$(which g++-6) \
# -DCMAKE_CUDA_HOST_COMPILER=$(which g++-6) \
# -DCMAKE_Fortran_COMPILER=$(which gfortran-6) \
# -DAMReX_CUDA_ARCH=6.0 \
# -DAMReX_CUDA_ERROR_CROSS_EXECUTION_SPACE_CALL=ON
# make -j 2
# Build libamrex and all tests with CUDA 12.0
tests-cuda11:
name: CUDA@12.0 GNU C++17 Release [${{ matrix.app }}] DIM=${{ matrix.dim }}
runs-on: ubuntu-22.04
continue-on-error: true
strategy:
fail-fast: false
matrix:
app:
- compressible
- compressible_stag
- immersedIons
dim: [3]
include:
# 2D and 3D tests for specified applications
- app: structFactTest
dim: 2
- app: structFactTest
dim: 3
- app: reactDiff
dim: 2
- app: reactDiff
dim: 3
- app: multispec
dim: 2
- app: multispec
dim: 3
- app: dean_kow/singlelevel
dim: 2
- app: dean_kow/singlelevel
dim: 3
- app: dean_kow/multilevel
dim: 2
- app: dean_kow/multilevel
dim: 3
- app: hydro
dim: 2
- app: hydro
dim: 3
env: {CXXFLAGS: "-fno-operator-names -Werror -Wall -Wextra -Wpedantic -Wnull-dereference -Wfloat-conversion -Wshadow -Woverloaded-virtual -Wextra-semi -Wunreachable-code"}
steps:
- uses: actions/checkout@v4
- name: Clone AMReX for dependency scripts
run: |
git clone https://github.com/AMReX-Codes/amrex.git ${{runner.workspace}}/amrex
- name: Prepare CUDA environment
run: ${{runner.workspace}}/amrex/.github/workflows/dependencies/dependencies_nvcc.sh 12.0
- name: Install Additional Dependencies
run: |
sudo apt-get update
sudo apt-get install -y libfftw3-dev libfftw3-mpi-dev
- name: Install CCache
run: ${{runner.workspace}}/amrex/.github/workflows/dependencies/dependencies_ccache.sh
- name: Set Up Cache
uses: actions/cache@v4
with:
path: ~/.cache/ccache
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ matrix.app }}-git-${{ github.sha }}
restore-keys: |
ccache-${{ github.workflow }}-${{ github.job }}-${{ matrix.app }}-git-
- name: Enable Problem Matchers
run: echo "::add-matcher::.github/problem-matchers/gcc.json"
- name: Build & Install ${{ matrix.app }}
run: |
export CCACHE_COMPRESS=1
export CCACHE_COMPRESSLEVEL=10
export CCACHE_MAXSIZE=600M
ccache -z
export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
cd exec/${{ matrix.app }}
which nvcc || echo "nvcc not in PATH!"
make -j2 VERBOSE=1 USE_MPI=TRUE USE_CUDA=TRUE USE_OMP=FALSE DIM=${{ matrix.dim }} TINY_PROFILE=FALSE 2>&1 | tee ${{runner.workspace}}/build-output.txt
ccache -s
du -hs ~/.cache/ccache
env:
AMREX_HOME: ${{runner.workspace}}/amrex
- name: Report
run: |
# Extract and count warnings
egrep "warning:" ${{runner.workspace}}/build-output.txt \
| egrep -v "amrex" \
| egrep -v "lto-wrapper: warning:" \
| sort | uniq \
| awk 'BEGIN{i=0}{print $0}{i++}END{print "Warnings: "i}' > ${{runner.workspace}}/build-warnings.txt
# Extract and count errors
egrep "error:" ${{runner.workspace}}/build-output.txt \
| egrep -v "amrex" \
| sort | uniq \
| awk 'BEGIN{i=0}{print $0}{i++}END{print "Errors: "i}' > ${{runner.workspace}}/build-errors.txt
echo "=== WARNINGS ==="
cat ${{runner.workspace}}/build-warnings.txt
echo "=== ERRORS ==="
cat ${{runner.workspace}}/build-errors.txt
# Only fail on errors, not warnings
export error_count=$(tail -n 1 ${{runner.workspace}}/build-errors.txt | awk '{print $2}')
exit ${error_count}
- name: Generate Error Summary
if: failure()
run: |
echo "## Build Failed 🚨" >> $GITHUB_STEP_SUMMARY
echo "**Error Details:**" >> $GITHUB_STEP_SUMMARY
echo "- Step: ${{ github.job }}" >> $GITHUB_STEP_SUMMARY
echo "- Commit: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
echo "- Branch: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Last 10 lines of build output:**" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
tail -10 ${{runner.workspace}}/build-output.txt >> $GITHUB_STEP_SUMMARY 2>/dev/null || echo "No build-output.txt found"
echo '```' >> $GITHUB_STEP_SUMMARY
# # Build 3D libamrex cuda build with configure
# configure-3d-cuda:
# name: CUDA@11.2 GNU@9.3.0 [configure 3D]
# runs-on: ubuntu-20.04
# steps:
# - uses: actions/checkout@v2
# - name: Dependencies
# run: .github/workflows/dependencies/dependencies_nvcc11.sh
# - name: Build & Install
# run: |
# export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
# ./configure --dim 3 --with-cuda yes --enable-eb yes --enable-xsdk-defaults yes --with-fortran no
# make -j2 WARN_ALL=TRUE WARN_ERROR=TRUE XTRA_CXXFLAGS=-fno-operator-names CXXSTD=c++17
# make install