| @@ -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 | |||