| @@ -71,7 +71,7 @@ jobs: | |||
| - name: Set and log asv machine configuration | |||
| run: | | |||
| cd benchmark/pybench | |||
| cd benchmark/pybench/asv | |||
| python3 -m asv machine --yes --config asv.conf.json | |||
| echo "Machine Configuration:" | |||
| cat ~/.asv-machine.json | |||
| @@ -81,94 +81,11 @@ jobs: | |||
| python3 -m asv machine --machine $MACHINE_NAME --yes --config $ASV_CONFIG -v | |||
| cat ~/.asv-machine.json | |||
| ###################### | |||
| - 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 | |||
| echo ${{ github.workspace}} | |||
| cd benchmark/pybench/asv | |||
| python3 -m asv run --config $ASV_CONFIG -v | |||
| env: | |||
| PKG_CONFIG_PATH: ${{ github.workspace }} | |||