diff --git a/.github/workflows/benchmark.yaml b/.github/workflows/benchmark.yaml new file mode 100644 index 0000000..4e9f1a7 --- /dev/null +++ b/.github/workflows/benchmark.yaml @@ -0,0 +1,18 @@ +name: benchmark + +on: + push: +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: take benchmarks + run: | + ./benchmark/gendoc.sh + - name: upload to wiki + uses: SwiftDocOrg/github-wiki-publish-action@v1 + with: + path: "documentation" + env: + GH_PERSONAL_ACCESS_TOKEN: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} diff --git a/benchmark/gendoc.sh b/benchmark/gendoc.sh new file mode 100755 index 0000000..b19a2aa --- /dev/null +++ b/benchmark/gendoc.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +mkdir -p document + +FILE=document/benchmark.md +TARGETS="i386-linux-handwritten c python" +TIMEFORMAT='%U' +function benchmark () { + sum=0 + for i in `seq $2`; do + t=`{ eval $1; } 2>&1` + sum=`echo $t + $sum | bc` + done + average=`echo "scale=3; $sum / $2" | bc | xargs printf "%.3f"` + echo $average +} + +function bootstrap { + time ./planck < bootstrap.fs benchmark/nop.fs 2>&1 > /dev/null +} + +function generate-table { + echo "## $1" + echo + echo "| implementation | sec |" + echo "|:---------------|----:|" + for impl in $TARGETS; do + make $impl 2>&1 > /dev/null + t=`benchmark $2 $3` + echo "| $impl | $t |" + done +} + +echo "# Benchmarks" >> $FILE +generate-table "Bootstrap Time" bootstrap 5 diff --git a/benchmark/nop.fs b/benchmark/nop.fs new file mode 100644 index 0000000..e69de29