Skip to content

Commit 4fe7618

Browse files
committed
PoC: Use generics instead of code gen for vectors
1 parent 7abb93a commit 4fe7618

20 files changed

+2521
-4401
lines changed

data/arrow.go

Lines changed: 164 additions & 179 deletions
Large diffs are not rendered by default.

data/arrow_column_builders.go

Lines changed: 69 additions & 66 deletions
Large diffs are not rendered by default.

data/benchmark-compare.sh

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Script to compare benchmark performance between branches using best practices
5+
# Usage: ./benchmark-compare.sh [base-branch] [feature-branch] [count]
6+
#
7+
# Best practices implemented:
8+
# - Uses -count=10 for statistical significance (can override with 3rd arg)
9+
# - Clears build cache between runs
10+
# - Stabilizes CPU frequency where possible
11+
# - Uses -benchtime for longer runs to reduce noise
12+
#
13+
# If no arguments provided:
14+
# - Runs benchmarks on current branch and saves to new.txt
15+
# - Switches to main, runs benchmarks and saves to old.txt
16+
# - Switches back and compares with benchstat
17+
#
18+
# If arguments provided:
19+
# - Uses specified branches for comparison
20+
21+
CURRENT_BRANCH=$(git branch --show-current)
22+
BASE_BRANCH=${1:-main}
23+
FEATURE_BRANCH=${2:-$CURRENT_BRANCH}
24+
COUNT=${3:-10} # Default to 10 runs for better statistical significance
25+
26+
echo "======================================================================"
27+
echo "Benchmark Comparison with Best Practices"
28+
echo "======================================================================"
29+
echo " Base branch: $BASE_BRANCH"
30+
echo " Feature branch: $FEATURE_BRANCH"
31+
echo " Iterations: $COUNT (minimum 6 recommended for confidence intervals)"
32+
echo ""
33+
34+
# Check if benchstat is installed
35+
if ! command -v benchstat &> /dev/null; then
36+
echo "benchstat is not installed. Installing..."
37+
go install golang.org/x/perf/cmd/benchstat@latest
38+
echo ""
39+
fi
40+
41+
# Warn about CPU frequency scaling
42+
echo "NOTE: For most accurate results:"
43+
echo " - Close other applications"
44+
echo " - Disable CPU frequency scaling if possible"
45+
echo " - Run on AC power (laptops)"
46+
echo " - Consider: sudo cpupower frequency-set --governor performance (Linux)"
47+
echo ""
48+
49+
# Save current state
50+
echo "Saving current work..."
51+
git stash push -u -m "benchmark comparison stash" 2>/dev/null || true
52+
53+
# Function to run benchmarks with best practices
54+
run_benchmarks() {
55+
local branch=$1
56+
local output=$2
57+
58+
echo "======================================================================"
59+
echo "Running benchmarks on $branch..."
60+
echo "======================================================================"
61+
62+
# Clear build cache to ensure clean build
63+
echo "Clearing build cache..."
64+
go clean -cache -testcache
65+
66+
# Run benchmarks with:
67+
# - count=$COUNT: Multiple runs for statistical significance
68+
# - benchmem: Include memory allocation stats
69+
# - benchtime=1s: Run each benchmark for at least 1 second (reduces timing noise)
70+
# - run=^$: Don't run any tests, only benchmarks
71+
echo "Running $COUNT iterations (this may take several minutes)..."
72+
go test -bench=. -benchmem -count=$COUNT -benchtime=1s -cpu=1 -run=^$ ./data 2>&1 | tee "$output"
73+
74+
echo ""
75+
echo "Results saved to $output"
76+
}
77+
78+
# Run benchmarks on base branch
79+
git checkout "$BASE_BRANCH" 2>&1 | grep -v "^M\s" || true
80+
run_benchmarks "$BASE_BRANCH" "old.txt"
81+
82+
# Run benchmarks on feature branch
83+
git checkout "$FEATURE_BRANCH" 2>&1 | grep -v "^M\s" || true
84+
run_benchmarks "$FEATURE_BRANCH" "new.txt"
85+
86+
echo ""
87+
echo "======================================================================"
88+
echo "Benchmark Comparison Results"
89+
echo "======================================================================"
90+
benchstat -alpha=0.05 old.txt new.txt

0 commit comments

Comments
 (0)