Posts, notes, and experiments.
How REX Made Literal Scalar Target Parameters Match The Modern OpenMP Launch ABI
The next REX GPU performance post: why scalar target parameters should not be lowered like address-based mapped objects, how REX identifies safe literal parameters, and how host packing plus device unpacking moved the generated code closer to LLVM's modern OpenMP launch ABI.
Read more ⟶How REX Handles Launch Geometry Fairly: What It May Optimize And What It Must Preserve
The next REX GPU performance post: why launch geometry is a compiler policy problem, how REX separates explicit user launch clauses from compiler-owned defaults, and why fair optimization means shrinking only the parts of the launch contract that the user did not freeze.
Read more ⟶How REX Replaced the Old XOMP Scheduler Path With Direct Grid-Stride GPU Lowering
The second performance-root-cause post in the REX GPU campaign: how the remaining `nn` gap moved from host lifecycle cost to device-loop shape, why the old XOMP static scheduler path was too expensive for canonical target loops, and how REX replaced it with generic direct grid-stride lowering.
Read more ⟶How REX Fixed the Early `nn` GPU Regression By Moving Offload Initialization Out Of The Timed Path
The first performance-root-cause post in the REX GPU campaign: how a large early `nn` slowdown turned out to be misplaced one-time offload registration work, why the generated source had to place `rex_offload_init()` before benchmark timing, and how lowering tests now protect that invariant.
Read more ⟶How REX Builds Native LLVM And Generated Variants For Side-By-Side GPU Benchmarking
A focused walkthrough of the benchmark build contract in REX: how the same application becomes a native LLVM OpenMP-offload binary and a REX-generated binary, why both must share the same LLVM runtime family, and how identical run commands keep the comparison honest.
Read more ⟶Why REX Treats GPU Benchmark Results As An Investigation Surface, Not A Scoreboard
A focused explanation of the top-layer benchmark contract in REX: same runtime stack, same inputs, normalized correctness, benchmark-appropriate timing, clause-preserving fairness, and results interpreted as evidence rather than a simplistic scoreboard.
Read more ⟶Why REX's GPU Benchmark Layer Must Not Become A Catch-All Test Suite
A focused case for keeping REX's GPU benchmark layer narrow: benchmarks are the final reality check, but they are the wrong place to first detect parser drift, semantic normalization bugs, or simple lowering-structure regressions.
Read more ⟶What Only Real GPU Benchmarks Still Catch In REX
A focused case for why REX still needs full GPU benchmark runs after parser, AST, lowering, and CPU-equivalence tests already pass: only real applications exposed misplaced offload init, bad timing proxies, baseline drift, and full-stack integration issues.
Read more ⟶How REX Validates Benchmark Correctness Without Trusting Naive Diffs
A focused walkthrough of the correctness side of REX benchmark validation: stripping non-semantic output lines, using reduced-output modes when benchmarks hide their results, and distinguishing current native-versus-REX agreement from stale-baseline drift.
Read more ⟶How REX Makes Fair GPU Offloading Comparisons Against Native LLVM
A focused methodology post on fair GPU benchmark comparisons between REX and native LLVM: same runtime stack, clause-preserving launch policy, benchmark-appropriate timing sources, and correctness rules that do not confuse drift with regression.
Read more ⟶