Skip to content

Commit

Permalink
Add benchmarks and CI using AirspeedVelocity
Browse files Browse the repository at this point in the history
  • Loading branch information
Zentrik committed Apr 9, 2023
1 parent 73eba79 commit 67ce672
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
68 changes: 68 additions & 0 deletions .github/workflows/benchmark_pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Benchmark a pull request

on:
pull_request_target:
branches:
- master

permissions:
pull-requests: write

jobs:
generate_plots:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v1
with:
version: "1.8"
- uses: julia-actions/cache@v1
- name: Extract Package Name from Project.toml
id: extract-package-name
run: |
PACKAGE_NAME=$(grep "^name" Project.toml | sed 's/^name = "\(.*\)"$/\1/')
echo "::set-output name=package_name::$PACKAGE_NAME"
- name: Build AirspeedVelocity
env:
JULIA_NUM_THREADS: 2
run: |
# Lightweight build step, as sometimes the runner runs out of memory:
julia -e 'ENV["JULIA_PKG_PRECOMPILE_AUTO"]=0; import Pkg; Pkg.add(;url="https://github.com/MilesCranmer/AirspeedVelocity.jl.git")'
julia -e 'ENV["JULIA_PKG_PRECOMPILE_AUTO"]=0; import Pkg; Pkg.build("AirspeedVelocity")'
- name: Add ~/.julia/bin to PATH
run: |
echo "$HOME/.julia/bin" >> $GITHUB_PATH
- name: Run benchmarks
run: |
echo $PATH
ls -l ~/.julia/bin
mkdir results
benchpkg ${{ steps.extract-package-name.outputs.package_name }} --rev="${{github.event.repository.default_branch}},${{github.event.pull_request.head.sha}}" --url=${{ github.event.repository.clone_url }} --bench-on="${{github.event.repository.default_branch}}" --output-dir=results/
- name: Create plots from benchmarks
run: |
mkdir -p plots
benchpkgplot ${{ steps.extract-package-name.outputs.package_name }} --rev="${{github.event.repository.default_branch}},${{github.event.pull_request.head.sha}}" --npart=10 --format=png --input-dir=results/ --output-dir=plots/
- name: Upload plot as artifact
uses: actions/upload-artifact@v2
with:
name: plots
path: plots
- name: Create markdown table from benchmarks
run: |
julia -e 'using AirspeedVelocity; combined_results=load_results("${{ steps.extract-package-name.outputs.package_name }}", ["${{github.event.repository.default_branch}}", "${{github.event.pull_request.head.sha}}"], input_dir="results"); table = create_table(combined_results); open("table.md", "w") do io; print(io, table); end'
echo '### Benchmark Results' > body.md
echo '' >> body.md
echo '' >> body.md
cat table.md >> body.md
echo '' >> body.md
echo '' >> body.md
echo '### Benchmark Plots' >> body.md
echo 'A plot of the benchmark results have been uploaded as an artifact to the workflow run for this PR.' >> body.md
echo 'Go to "Actions"->"Benchmark a pull request"->[the most recent run]->"Artifacts" (at the bottom).' >> body.md
- name: Comment on PR
uses: peter-evans/create-or-update-comment@v3
with:
issue-number: ${{ github.event.pull_request.number }}
body-path: body.md
32 changes: 32 additions & 0 deletions benchmark/benchmarks.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using BenchmarkTools

const SUITE = BenchmarkGroup()

function perf_steprange_long(x, a)
s = zero(eltype(x))

@inbounds for j in a
for i in LoopVecRange{8}(1, j)
s += x[i]
end
end

return s
end

function perf_steprange(x)
s = zero(eltype(x))

@inbounds for i in LoopVecRange{8}(x)
s += x[i]
end

return s
end

SUITE["LoopVecRange"] = BenchmarkGroup(["string", "unicode"])

SUITE["LoopVecRange"]["steprange"] = @benchmarkable perf_steprange($x) setup=(x=rand(800))

tmp_x=rand(800)
SUITE["LoopVecRange"]["steprange_long"] = @benchmarkable perf_steprange_long($tmp_x, $(rand(round(Int, length(tmp_x) / 2):length(tmp_x), 10^6)))

0 comments on commit 67ce672

Please sign in to comment.