|
- name: Run codspeed benchmarks
-
- on: [push, pull_request]
-
- concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
- permissions:
- contents: read # to fetch code (actions/checkout)
-
- jobs:
- benchmarks:
- if: "github.repository == 'OpenMathLib/OpenBLAS'"
- strategy:
- fail-fast: false
- matrix:
- os: [ubuntu-22.04]
- fortran: [gfortran]
- build: [make]
- pyver: ["3.12"]
- runs-on: ${{ matrix.os }}
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v3
- with:
- python-version: ${{ matrix.pyver }}
-
- - name: Print system information
- run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- cat /proc/cpuinfo
- fi
-
- - name: Install Dependencies
- run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- sudo apt-get update
- sudo apt-get install -y gfortran cmake ccache libtinfo5
- else
- echo "::error::$RUNNER_OS not supported"
- exit 1
- fi
-
- - name: Compilation cache
- uses: actions/cache@v3
- with:
- path: ~/.ccache
- # We include the commit sha in the cache key, as new cache entries are
- # only created if there is no existing entry for the key yet.
- # GNU make and cmake call the compilers differently. It looks like
- # that causes the cache to mismatch. Keep the ccache for both build
- # tools separate to avoid polluting each other.
- key: ccache-${{ runner.os }}-${{ matrix.build }}-${{ matrix.fortran }}-${{ github.ref }}-${{ github.sha }}
- # Restore a matching ccache cache entry. Prefer same branch and same Fortran compiler.
- restore-keys: |
- ccache-${{ runner.os }}-${{ matrix.build }}-${{ matrix.fortran }}-${{ github.ref }}
- ccache-${{ runner.os }}-${{ matrix.build }}-${{ matrix.fortran }}
- ccache-${{ runner.os }}-${{ matrix.build }}
-
- - name: Write out the .pc
- run: |
- cd benchmark/pybench
- cat > openblas.pc << EOF
- libdir=${{ github.workspace }}
- includedir= ${{ github.workspace }}
- openblas_config= OpenBLAS 0.3.27 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=64
- version=0.0.99
- extralib=-lm -lpthread -lgfortran -lquadmath -L${{ github.workspace }} -lopenblas
- Name: openblas
- Description: OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version
- Version: ${version}
- URL: https://github.com/xianyi/OpenBLAS
- Libs: ${{ github.workspace }}/libopenblas.so -Wl,-rpath,${{ github.workspace }}
- Libs.private: -lm -lpthread -lgfortran -lquadmath -L${{ github.workspace }} -lopenblas
- Cflags: -I${{ github.workspace}}
- EOF
- cat openblas.pc
-
- - name: Configure ccache
- run: |
- if [ "${{ matrix.build }}" = "make" ]; then
- # Add ccache to path
- if [ "$RUNNER_OS" = "Linux" ]; then
- echo "/usr/lib/ccache" >> $GITHUB_PATH
- elif [ "$RUNNER_OS" = "macOS" ]; then
- echo "$(brew --prefix)/opt/ccache/libexec" >> $GITHUB_PATH
- else
- echo "::error::$RUNNER_OS not supported"
- exit 1
- fi
- fi
- # Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota (5 GB).
- test -d ~/.ccache || mkdir -p ~/.ccache
- echo "max_size = 300M" > ~/.ccache/ccache.conf
- echo "compression = true" >> ~/.ccache/ccache.conf
- ccache -s
-
- - name: Build OpenBLAS
- run: |
- case "${{ matrix.build }}" in
- "make")
- make -j$(nproc) DYNAMIC_ARCH=1 USE_OPENMP=0 FC="ccache ${{ matrix.fortran }}"
- ;;
- "cmake")
- mkdir build && cd build
- cmake -DDYNAMIC_ARCH=1 \
- -DNOFORTRAN=0 \
- -DBUILD_WITHOUT_LAPACK=0 \
- -DCMAKE_VERBOSE_MAKEFILE=ON \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_Fortran_COMPILER=${{ matrix.fortran }} \
- -DCMAKE_C_COMPILER_LAUNCHER=ccache \
- -DCMAKE_Fortran_COMPILER_LAUNCHER=ccache \
- ..
- cmake --build .
- ;;
- *)
- echo "::error::Configuration not supported"
- exit 1
- ;;
- esac
-
- - name: Show ccache status
- continue-on-error: true
- run: ccache -s
-
- - name: Install benchmark dependencies
- run: pip install meson ninja numpy pytest pytest-codspeed --user
-
- - name: Build the wrapper
- run: |
- cd benchmark/pybench
- export PKG_CONFIG_PATH=$PWD
- meson setup build --prefix=$PWD/build-install
- meson install -C build
- #
- # sanity check
- cd build/openblas_wrap
- python -c'import _flapack; print(dir(_flapack))'
-
- - name: Run benchmarks under pytest-benchmark
- run: |
- cd benchmark/pybench
- pip install pytest-benchmark
- export PYTHONPATH=$PWD/build-install/lib/python${{matrix.pyver}}/site-packages/
- OPENBLAS_NUM_THREADS=1 pytest benchmarks/bench_blas.py -k 'gesdd'
-
- - name: Run benchmarks
- uses: CodSpeedHQ/action@v3
- with:
- token: ${{ secrets.CODSPEED_TOKEN }}
- run: |
- cd benchmark/pybench
- export PYTHONPATH=$PWD/build-install/lib/python${{matrix.pyver}}/site-packages/
- OPENBLAS_NUM_THREADS=1 pytest benchmarks/bench_blas.py --codspeed
|