Skip to content

Compare: transit-qa from nigiri #1937

Compare: transit-qa from nigiri

Compare: transit-qa from nigiri #1937

Workflow file for this run

name: GPU Validation
on:
push:
branches: [ master, gouda ]
pull_request:
branches: [ master ]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
jobs:
gpu-validate:
runs-on: [ self-hosted, linux, x64, gpu ]
env:
DEBIAN_FRONTEND: noninteractive
BUILDCACHE_COMPRESS: true
BUILDCACHE_DIRECT_MODE: true
BUILDCACHE_ACCURACY: SLOPPY
BUILDCACHE_MAX_CACHE_SIZE: 16106127360
CUDACXX: /usr/local/cuda/bin/nvcc
CLICOLOR_FORCE: 1
LD_LIBRARY_PATH: /usr/local/cuda/lib64
# protect_shadow_gap=0 is required for CUDA + ASan's combo.
ASAN_OPTIONS: alloc_dealloc_mismatch=0:protect_shadow_gap=0
UBSAN_OPTIONS: halt_on_error=1:abort_on_error=1:print_stacktrace=1
COMPUTE_SANITIZER: /usr/local/cuda/bin/compute-sanitizer --tool memcheck --error-exitcode 1
steps:
- uses: actions/checkout@v4
- name: Get deps
run: mkdir -p ~/deps && mv ~/deps .
- name: Configure
run: |
cmake --preset cuda-sanitizer --compile-no-warning-as-error
cmake --preset cuda
cmake --preset cpu
- name: Build
run: |
./build/cuda/buildcache/bin/buildcache -z
cmake --build --preset cuda-sanitizer --target motis -j 12 # try not to OOM
cmake --build --preset cuda --target motis nigiri-test
cmake --build --preset cpu --target motis
./build/cuda/buildcache/bin/buildcache -s
- name: nigiri-test
run: ./build/cuda/deps/nigiri/nigiri-test
- name: nigiri-test (compute-sanitizer memcheck)
run: |
/usr/local/cuda/bin/compute-sanitizer --tool memcheck \
--error-exitcode 1 --launch-timeout 120 \
./build/cuda/deps/nigiri/nigiri-test
- name: Save deps
if: always()
run: mv deps ~
- name: Import Germany
run: |
cd "$HOME/ci-data/ger"
"$GITHUB_WORKSPACE/build/cpu/motis" import -c config_de.yml -d data
- name: Import Europe
run: |
cd "$HOME/ci-data/eu"
"$GITHUB_WORKSPACE/build/cpu/motis" import -c config_europe.yml -d data
- name: Import Switzerland
run: |
cd "$HOME/ci-data/ch"
"$GITHUB_WORKSPACE/build/cpu/motis" import -c config_ch.yml -d data
- name: Validate Germany
run: |
# compute-sanitizer slows every kernel down by an order of
# magnitude, so it gets a much smaller n than the plain runs.
GER="--data $HOME/ci-data/ger/data --name germany --date 2026-07-10
--intermodal --routed-footpaths --tts
--exclude-transit-modes HIGHSPEED_RAIL"
python3 tools/validate.py ./build/cpu/motis ./build/cuda/motis $GER --n 25
python3 tools/validate.py ./build/cuda-san/motis $GER --n 25
python3 tools/validate.py ./build/cuda/motis $GER --n 3 \
--launcher "$COMPUTE_SANITIZER"
- name: Validate Europe
run: |
EU="--data $HOME/ci-data/eu/data --name europe --date 2026-07-24
--rt-dir $HOME/ci-data/eu --intermodal --routed-footpaths --flex
--bike --tts --exclude-transit-modes COACH --n_threads 8"
python3 tools/validate.py ./build/cpu/motis ./build/cuda/motis $EU --n 20
python3 tools/validate.py ./build/cuda-san/motis $EU --n 10
- name: Validate Europe RENTAL
run: |
BOUNDS='{"type":"Polygon","coordinates":[[[1.4461,48.1200],[3.5599,48.1200],[3.5599,49.2415],[1.4461,49.2415],[1.4461,48.1200]]]}'
RENT="--data $HOME/ci-data/eu/data-rental --gbfs-dir $HOME/ci-data/eu
--rt-dir $HOME/ci-data/eu --name europe-rental --date 2026-07-24
--rental --n_threads 8"
python3 tools/validate.py ./build/cpu/motis ./build/cuda/motis $RENT --bounds "$BOUNDS" --n 20
python3 tools/validate.py ./build/cuda-san/motis $RENT --bounds "$BOUNDS" --n 10
python3 tools/validate.py ./build/cuda/motis $RENT --bounds "$BOUNDS" --n 3 \
--launcher "$COMPUTE_SANITIZER"
- name: Validate Switzerland ODM
run: |
CH="--data $HOME/ci-data/ch/data --name switzerland --date 2026-07-06
--flex"
python3 tools/validate.py ./build/cpu/motis ./build/cuda/motis $CH --n 250
python3 tools/validate.py ./build/cuda-san/motis $CH --n 100
python3 tools/validate.py ./build/cuda/motis $CH --n 10 \
--launcher "$COMPUTE_SANITIZER"