ADMS '26 · VLDB 2026 · GPU query processing
Memory-elastic, skew-tolerant GPU hash joins
Hangdong Zhao · Rathijit Sen · Craig Peeper · Matteo Interlandi
The baseline
h(t) = 8, so t starts at slot 8.
h(v) = 7 · stride = 2
Shortcoming 1
Rows can be interleaved in memory without sharing a probe path.
2 → 4
v probe sequence7 → 9 → 11 → 13 → ∅15
tslot 8 · skipped
Shortcoming 2
The table is hard to shrink when HBM gets tight.
Introducing Rubberband
The hash-index resolution can be relaxed.
Exact lookup
Approximate lookup
A ⋈x=y B
≡
σx=y(A ⋈φ(x)=φ(y) B)
φ(v) = v
A.x = B.y
φ ≡ 1
σx=y(A × B)
φ(v) = hash(v) mod K
flexible lookup resolution
Offsets mark contiguous buckets.
Dense rowIds
Rows stay fixed. Buckets merge.
K: 5 → 3 · rows fixed
Two arrays, zeroed. Count one row per click.
offsets K + 1 = 6
rowIds N = 8
Probe key v. One hash locates the bucket.
φ(v) = h(v) mod 5 = 3
offsets
rowIds
Open addressing
slots 7–15
Rubberband
offsets + rowIds
TPC-H SF100 22 full queries
Production skewed workloads
150M build × 600M probe · build + probe runtime
One real join exposes a smooth memory–runtime tradeoff.
GPU execution as the bucket budget tightens
Across 22 queries, memory shrinks before runtime bends.
Build, probe, and end-to-end speedup vs open addressing
Probe amortizes build—even with tight HBM.
Peak intermediate HBM and end-to-end runtime · K / N = 1.05
Up to 13% less peak HBM; mean runtime improves 0.7%.
#0–2 mostly distinct · #3–10 duplicate-heavy
Duplicate-heavy builds become an advantage—without a separate skew path.
Production capture #11
12.5M build rows · speedup over open addressing
Two structural reasons
Retrying CAS and scattered chain walks become first-try adds and one contiguous scan.
Retries pile onto the hot slot.
Each probe re-walks a long random chain.
Every atomicAdd commits first try.
One cooperative, bandwidth-bound scan.
Summary
Thank you