Repository navigation
Improve DAE Constraint Initialization #954
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Designated GPU Runner for CUDA Solvers | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| cuda_double_precision_tests: | |
| runs-on: | |
| group: CIRRUS-4x16-gpu | |
| container: | |
| image: nvcr.io/nvidia/nvhpc:25.9-devel-cuda13.0-ubuntu24.04 | |
| options: --gpus all | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # full history so gh-pages branch is available | |
| - name: Mark workspace as git safe directory | |
| run: git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
| - name: Install dependencies | |
| # No valgrind. This job charts wall-clock time only. Callgrind counts | |
| # host CPU instructions and cannot see GPU kernels. | |
| run: | | |
| apt update | |
| apt install -y cmake g++ python3 pip | |
| - name: Run Cmake | |
| # MICM_ENABLE_BENCHMARK defaults to OFF; the Build step needs it on. | |
| run: cmake -S . -B build -DMICM_GPU_TYPE="a10" -DMICM_ENABLE_BENCHMARK=ON | |
| - name: Copy cublas headers | |
| run: | | |
| cp -r /opt/nvidia/hpc_sdk/*/25.9/cuda/include/* /usr/include/ | |
| - name: Build | |
| run: cmake --build build --parallel 10 | |
| - name: Run tests | |
| run: | | |
| cd build | |
| ctest --output-on-failure --verbose --no-tests=error --output-junit ctest-results.xml -j 10 | |
| - name: Upload ctest results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ctest-results-cuda-double | |
| path: build/ctest-results.xml | |
| # The GPU backend registers no standard ordering, so name the vector ones. | |
| # | |
| # Write to a file, then convert. This container runs steps under `sh -e`, | |
| # which has no pipefail, so a pipeline would hide a script failure. | |
| - name: Benchmark the GPU backend (chapman) | |
| run: | | |
| scripts/bench_micm.sh build 10000 30 gpu in-place mozart chapman \ | |
| vector1 vector2 vector4 vector8 vector128 > cuda_timing.txt | |
| python3 scripts/to_benchmark_json.py --unit ms --value-type float \ | |
| < cuda_timing.txt > cuda_timing.json | |
| # This workflow measures the CIRRUS a10 GPU runner. benchmark-charts.yml measures | |
| # ubuntu-latest. The two machines keep separate series and separate directories, so | |
| # neither one compares against the other, and the two pushes to gh-pages cannot collide. | |
| - name: Store timing results (chapman) | |
| if: github.event_name == 'push' | |
| uses: benchmark-action/github-action-benchmark@v1 | |
| with: | |
| name: Chapman Timing (GPU backend) | |
| tool: customSmallerIsBetter | |
| output-file-path: cuda_timing.json | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| auto-push: true | |
| benchmark-data-dir-path: dev/bench/gpu/timing | |
| # ts1 runs after the chapman series is stored, so a ts1 failure cannot | |
| # stop the chapman chart from updating. | |
| - name: Benchmark the GPU backend (ts1) | |
| run: | | |
| scripts/bench_micm.sh build 10000 30 gpu in-place mozart ts1 \ | |
| vector1 vector2 vector4 vector8 vector128 > cuda_ts1_timing.txt | |
| python3 scripts/to_benchmark_json.py --unit ms --value-type float \ | |
| < cuda_ts1_timing.txt > cuda_ts1_timing.json | |
| - name: Store timing results (ts1) | |
| if: github.event_name == 'push' | |
| uses: benchmark-action/github-action-benchmark@v1 | |
| with: | |
| name: TS1 Timing (GPU backend) | |
| tool: customSmallerIsBetter | |
| output-file-path: cuda_ts1_timing.json | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| auto-push: true | |
| benchmark-data-dir-path: dev/bench/gpu/timing | |
| - name: Save PR number for benchmark comment workflow | |
| if: always() && github.event_name == 'pull_request' | |
| env: | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| run: echo "$PR_NUMBER" > pr-number.txt | |
| - name: Upload benchmark outputs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: micm-bench | |
| path: | | |
| cuda_timing.json | |
| cuda_timing.txt | |
| cuda_ts1_timing.json | |
| cuda_ts1_timing.txt | |
| pr-number.txt | |
| cuda_single_precision_tests: | |
| needs: cuda_double_precision_tests | |
| runs-on: | |
| group: CIRRUS-4x16-gpu | |
| container: | |
| image: nvcr.io/nvidia/nvhpc:25.9-devel-cuda13.0-ubuntu24.04 | |
| options: --gpus all | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Mark workspace as git safe directory | |
| run: git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
| - name: Install dependencies | |
| run: | | |
| apt update | |
| apt install -y cmake g++ | |
| - name: Run Cmake | |
| run: cmake -S . -B build -DMICM_GPU_TYPE="a10" -DMICM_USE_DOUBLE=OFF | |
| - name: Copy cublas headers | |
| run: | | |
| cp -r /opt/nvidia/hpc_sdk/*/25.9/cuda/include/* /usr/include/ | |
| - name: Build | |
| run: cmake --build build --parallel 10 | |
| - name: Run tests | |
| run: | | |
| cd build | |
| ctest --output-on-failure --verbose --no-tests=error --output-junit ctest-results.xml -j 10 | |
| - name: Upload ctest results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ctest-results-cuda-single | |
| path: build/ctest-results.xml |