@@ -53,7 +53,7 @@ class BenchmarkRunner:
5353 """Run benchmarks across multiple adapters."""
5454
5555 BENCHMARKS = {
56- "groupby" : ["groupby_q1" , "groupby_q2" , "groupby_q3" , "groupby_q4" , "groupby_q5" ],
56+ "groupby" : ["groupby_q1" , "groupby_q2" , "groupby_q3" , "groupby_q4" , "groupby_q5" , "groupby_q6" ],
5757 "join" : ["join_inner" , "join_left" ],
5858 "sort" : ["sort_single" , "sort_multi" ],
5959 }
@@ -222,7 +222,13 @@ def print_comparison(results: list[BenchmarkRun]) -> None:
222222 by_benchmark [run .benchmark ] = {}
223223 by_benchmark [run .benchmark ][run .adapter ] = run
224224
225- adapters = sorted (set (r .adapter for r in results ))
225+ # Put rayforce first, then sort the rest
226+ all_adapters = set (r .adapter for r in results )
227+ adapters = []
228+ if "rayforce" in all_adapters :
229+ adapters .append ("rayforce" )
230+ all_adapters .remove ("rayforce" )
231+ adapters .extend (sorted (all_adapters ))
226232
227233 print ("\n " + "=" * 60 )
228234 print ("COMPARISON (median ms)" )
@@ -235,27 +241,35 @@ def print_comparison(results: list[BenchmarkRun]) -> None:
235241 print (header )
236242 print ("-" * 60 )
237243
244+ # Track speedups relative to rayforce
245+ speedups : dict [str , list [float ]] = {a : [] for a in adapters }
246+
238247 # Rows
239248 for bench_name , adapter_results in sorted (by_benchmark .items ()):
240249 row = f"{ bench_name :<15} "
241- times = []
250+ rf_time = adapter_results .get ("rayforce" , None )
251+ rf_ms = rf_time .median_ms if rf_time else None
252+
242253 for adapter in adapters :
243254 if adapter in adapter_results :
244255 t = adapter_results [adapter ].median_ms
245- times .append ((adapter , t ))
246256 row += f" { t :>12.2f} "
257+ if rf_ms and rf_ms > 0 :
258+ speedups [adapter ].append (t / rf_ms )
247259 else :
248260 row += f" { 'N/A' :>12} "
249261 print (row )
250262
251- # Mark fastest
252- if times :
253- fastest = min (times , key = lambda x : x [1 ])
254- slowest = max (times , key = lambda x : x [1 ])
255- if len (times ) > 1 :
256- speedup = slowest [1 ] / fastest [1 ]
257- print (f" → { fastest [0 ]} is { speedup :.1f} x faster than { slowest [0 ]} " )
258-
263+ # Average speedup line
264+ print ("-" * 60 )
265+ row = f"{ '(avg speedup)' :<15} "
266+ for adapter in adapters :
267+ if speedups [adapter ]:
268+ avg = sum (speedups [adapter ]) / len (speedups [adapter ])
269+ row += f" { avg :>11.2f} x"
270+ else :
271+ row += f" { 'N/A' :>12} "
272+ print (row )
259273 print ("=" * 60 )
260274
261275
0 commit comments