11#! /bin/bash
2-
3- # Benchmark comparison script for Effekt
4- # Compares current branch against main branch
5-
62set -e
73
8- # Parse command-line arguments
94SKIP_COMPILE=0
10- while [[ $# -gt 0 ]]; do
11- case $1 in
12- --skip-compile)
13- SKIP_COMPILE=1
14- shift
15- ;;
16- * )
17- echo " Unknown option: $1 "
18- echo " Usage: $0 [--skip-compile]"
19- exit 1
20- ;;
21- esac
22- done
5+ if [ " $1 " = " --skip-compile" ]; then
6+ SKIP_COMPILE=1
7+ fi
238
24- # Configuration (hardcoded)
259BACKENDS=(" llvm" )
26- WARMUP=5
10+ WARMUP=10
2711RUNS=50
2812TARGET_BRANCH=" main"
2913OUTPUT_DIR=" benchmark-results"
3014TIMESTAMP=$( date +%Y%m%d_%H%M%S)
3115CURRENT_BRANCH=$( git branch --show-current)
3216CURRENT_BRANCH_SAFE=" ${CURRENT_BRANCH// \/ / -} "
3317
34- # Colors
35- GREEN=' \033[0;32m'
36- BLUE=' \033[0;34m'
37- YELLOW=' \033[1;33m'
38- NC=' \033[0m'
18+ cleanup () {
19+ local current=$( git branch --show-current)
20+ if [ " $current " != " $CURRENT_BRANCH " ]; then
21+ echo " "
22+ echo " Interrupted! Switching back to $CURRENT_BRANCH ..."
23+ git checkout -q " $CURRENT_BRANCH "
24+ fi
25+ exit 1
26+ }
27+
28+ trap cleanup SIGINT SIGTERM
3929
4030if ! command -v hyperfine & > /dev/null; then
4131 echo " Error: hyperfine is not installed"
4232 exit 1
4333fi
4434
45- # Check if we're on main branch
4635if [ " $CURRENT_BRANCH " = " $TARGET_BRANCH " ]; then
4736 echo " Error: You are currently on the $TARGET_BRANCH branch"
4837 echo " Please switch to your feature branch first"
5140
5241mkdir -p " $OUTPUT_DIR "
5342
54- # Define benchmarks with their parameters
5543declare -A BENCHMARKS=(
56- [" arity_raising/record_addition" ]=" 5000000"
57- [" arity_raising/nested_records" ]=" 2500000"
58- [" arity_raising/record_map" ]=" 10000"
44+ [" arity_raising/record_passing" ]=" 25000000"
45+ [" arity_raising/matrix_determinant" ]=" 2000000"
5946)
6047
61- echo -e " ${BLUE} Comparing: $CURRENT_BRANCH vs $TARGET_BRANCH ${NC} "
48+ echo " Comparing: $CURRENT_BRANCH vs $TARGET_BRANCH "
6249echo " Backends: ${BACKENDS[*]} "
6350echo " Runs: $RUNS , Warmup: $WARMUP "
6451echo " Skip compilation: $( [ $SKIP_COMPILE -eq 1 ] && echo ' yes' || echo ' no' ) "
6552echo " "
6653
67- # Create output directories
6854for backend in " ${BACKENDS[@]} " ; do
6955 OUT_CURRENT=" out-${CURRENT_BRANCH_SAFE} -${backend} "
7056 OUT_MAIN=" out-main-${backend} "
7157 mkdir -p " $OUT_CURRENT " " $OUT_MAIN "
7258done
7359
7460if [ $SKIP_COMPILE -eq 0 ]; then
75- # Build compiler and compile benchmarks on current branch
76- echo -e " ${YELLOW} === Building compiler on $CURRENT_BRANCH ===${NC} "
61+
62+ if ! git diff-index --quiet HEAD --; then
63+ echo " Error: You have uncommitted changes"
64+ echo " Please commit or stash your changes before running this script"
65+ exit 1
66+ fi
67+
68+ echo " === Building compiler on $CURRENT_BRANCH ==="
7769 sbt install
7870 echo " "
7971
80- echo -e " ${YELLOW} === Compiling benchmarks on $CURRENT_BRANCH ===${NC} "
72+ echo " === Compiling benchmarks on $CURRENT_BRANCH ==="
8173 for backend in " ${BACKENDS[@]} " ; do
8274 OUT_CURRENT=" out-${CURRENT_BRANCH_SAFE} -${backend} "
83- echo -e " ${GREEN} Backend: $backend ${NC} "
75+ echo " Backend: $backend "
8476
8577 for bench_path in " ${! BENCHMARKS[@]} " ; do
8678 bench_name=$( basename " $bench_path " )
@@ -91,25 +83,15 @@ if [ $SKIP_COMPILE -eq 0 ]; then
9183 done
9284 echo " "
9385
94- # Stash any uncommitted changes before switching branches
95- if ! git diff-index --quiet HEAD --; then
96- echo -e " ${YELLOW} Stashing uncommitted changes before switching to $TARGET_BRANCH ...${NC} "
97- git stash push -m " benchmark-compare temporary stash"
98- STASHED=1
99- else
100- STASHED=0
101- fi
102-
103- # Build compiler and compile benchmarks on main branch
104- echo -e " ${YELLOW} === Building compiler on $TARGET_BRANCH ===${NC} "
86+ echo " === Building compiler on $TARGET_BRANCH ==="
10587 git checkout -q " $TARGET_BRANCH "
10688 sbt install
10789 echo " "
10890
109- echo -e " ${YELLOW} === Compiling benchmarks on $TARGET_BRANCH ===${NC} "
91+ echo " === Compiling benchmarks on $TARGET_BRANCH ==="
11092 for backend in " ${BACKENDS[@]} " ; do
11193 OUT_MAIN=" out-main-${backend} "
112- echo -e " ${GREEN} Backend: $backend ${NC} "
94+ echo " Backend: $backend "
11395
11496 for bench_path in " ${! BENCHMARKS[@]} " ; do
11597 bench_name=$( basename " $bench_path " )
@@ -120,27 +102,19 @@ if [ $SKIP_COMPILE -eq 0 ]; then
120102 done
121103 echo " "
122104
123- # Switch back to current branch
124- echo -e " ${YELLOW} === Switching back to $CURRENT_BRANCH ===${NC} "
105+ echo " === Switching back to $CURRENT_BRANCH ==="
125106 git checkout -q " $CURRENT_BRANCH "
126-
127- # Restore stashed changes if any
128- if [ $STASHED -eq 1 ]; then
129- echo -e " ${YELLOW} Restoring stashed changes...${NC} "
130- git stash pop
131- fi
132107 echo " "
133108else
134- echo -e " ${YELLOW} === Skipping compilation (using existing binaries) ===${NC} "
109+ echo " === Skipping compilation (using existing binaries) ==="
135110 echo " "
136111fi
137112
138- echo -e " ${BLUE} === Starting benchmarks ===${NC} "
113+ echo " === Starting benchmarks ==="
139114echo " "
140115
141- # Now run benchmarks using pre-compiled binaries
142116for backend in " ${BACKENDS[@]} " ; do
143- echo -e " ${YELLOW} === Benchmarking backend: $backend ===${NC} "
117+ echo " === Benchmarking backend: $backend ==="
144118
145119 OUT_CURRENT=" out-${CURRENT_BRANCH_SAFE} -${backend} "
146120 OUT_MAIN=" out-main-${backend} "
@@ -155,9 +129,8 @@ for backend in "${BACKENDS[@]}"; do
155129 bench_name=$( basename " $bench_path " )
156130 params=${BENCHMARKS[$bench_path]}
157131
158- echo -e " ${GREEN} $bench_name ${NC} "
132+ echo " $bench_name "
159133
160- # Set executable paths based on backend
161134 case $backend in
162135 llvm)
163136 current_exec=" ./$OUT_CURRENT /${bench_name} "
@@ -173,7 +146,6 @@ for backend in "${BACKENDS[@]}"; do
173146 ;;
174147 esac
175148
176- # Run comparison
177149 echo " ## $bench_name " >> " $comparison_file "
178150 hyperfine \
179151 --warmup " $WARMUP " \
@@ -185,8 +157,8 @@ for backend in "${BACKENDS[@]}"; do
185157 echo " " >> " $comparison_file "
186158 done
187159
188- echo -e " ${GREEN} Results: $comparison_file ${NC} "
160+ echo " Results: $comparison_file "
189161 echo " "
190162done
191163
192- echo -e " ${GREEN} Done! Results in: $OUTPUT_DIR /${NC} "
164+ echo " Done! Results in: $OUTPUT_DIR /"
0 commit comments