| @@ -0,0 +1,141 @@ | |||||
| name: Benchmark on arm64 graviton cirun | |||||
| on: | |||||
| push: | |||||
| branches: | |||||
| - develop | |||||
| - release-** | |||||
| pull_request: | |||||
| branches: | |||||
| - develop | |||||
| - release-** | |||||
| concurrency: | |||||
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |||||
| cancel-in-progress: true | |||||
| permissions: | |||||
| contents: read # to fetch code (actions/checkout) | |||||
| jobs: | |||||
| build: | |||||
| if: "github.repository == 'OpenMathLib/OpenBLAS'" | |||||
| runs-on: "cirun-aws-runner-graviton--${{ github.run_id }}" | |||||
| strategy: | |||||
| fail-fast: false | |||||
| matrix: | |||||
| fortran: [gfortran] | |||||
| build: [make] | |||||
| steps: | |||||
| - name: Checkout repository | |||||
| uses: actions/checkout@v3 | |||||
| - name: Print system information | |||||
| run: | | |||||
| if [ "$RUNNER_OS" == "Linux" ]; then | |||||
| cat /proc/cpuinfo | |||||
| else | |||||
| echo "::error::$RUNNER_OS not supported" | |||||
| exit 1 | |||||
| fi | |||||
| - name: Install Dependencies | |||||
| run: | | |||||
| if [ "$RUNNER_OS" == "Linux" ]; then | |||||
| sudo apt update | |||||
| sudo apt-get install -y gfortran cmake ccache libtinfo5 python3-pip pkg-config | |||||
| 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: Configure ccache | |||||
| run: | | |||||
| if [ "${{ matrix.build }}" = "make" ]; then | |||||
| # Add ccache to path | |||||
| if [ "$RUNNER_OS" = "Linux" ]; then | |||||
| echo "/usr/lib/ccache" >> $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 | |||||
| make install PREFIX=$HOME/built-libs | |||||
| - name: Show ccache status | |||||
| continue-on-error: true | |||||
| run: ccache -s | |||||
| - name: Install benchmarking dependencies | |||||
| run: pip3 install meson ninja numpy pytest pytest-benchmark --user | |||||
| - name: Build the wrapper | |||||
| run: | | |||||
| cd benchmark/pybench | |||||
| export PKG_CONFIG_PATH=$HOME/built-libs/lib/pkgconfig | |||||
| export PATH=$HOME/.local/bin:$PATH | |||||
| meson setup build --prefix=$PWD/build-install | |||||
| meson install -C build | |||||
| # | |||||
| # sanity check | |||||
| cd build/openblas_wrap | |||||
| python3 -c'import _flapack; print(dir(_flapack))' | |||||
| # | |||||
| # copy the built .so (ubuntu linker!) | |||||
| cp _flapack.cpython-*-aarch64-linux-gnu.so ../../build-install/lib/python3/dist-packages/openblas_wrap | |||||
| - name: Run benchmarks | |||||
| run: | | |||||
| cd benchmark/pybench | |||||
| export PATH=$HOME/.local/bin:$PATH | |||||
| export PYTHONPATH=$PWD/build-install/lib/python3/dist-packages/ | |||||
| OPENBLAS_NUM_THREADS=1 pytest benchmarks/bench_blas.py | |||||