DPI Research
Not sure where the f8_quant submission is supposed to go, so here it is: https://github.com/dpiresearch/Helion_20260314/blob/main/helion/fp8_quant_py/submission.py For causal_conf1d Tuned the Helion execution config so t
Core trick
Raises causal_conv1d to 4 warps and 2 pipeline stages, and keeps gated DeltaNet state in registers across chunks.
Description
Not sure where the f8_quant submission is supposed to go, so here it is: https://github.com/dpiresearch/Helion_20260314/blob/main/helion/fp8_quant_py/submission.py
For causal_conf1d
Tuned the Helion execution config so the kernel uses the GPU more effectively:
num_warps: 1 → 4
More threads per block (4×32 = 128), so more parallelism and better occupancy.
num_stages: 1 → 2
More pipeline stages so load/store and compute can overlap better (better memory latency hiding).
For the gated_deltanet_* kernels
Here’s a concise summary of what the gated_deltanet\* submission kernels improve over the reference implementations.
1. gated_deltanet_chunk_fwd_h
Reference (reference.py): PyTorch eager, sequential over chunks. For each chunk it:
Keeps full chunk tensors k_c, w_c, u_c, g_c in memory
Does v_new_c[:, c] = u_c[:, c] - w_c[:, c] @ h and h = h * exp(g_last) + k_c[:, c].T @ v_gated
Loops over c in Python; lots of intermediates and global memory traffic
Improvements in submission (submission.py):
Single Helion kernel with explicit tiling: tiles over (B*H, V) with block [1, 8] and over time T with chunk size C = 64.
Recurrent state in registers: keeps state [K, V] per (b, h) and updates it chunk-by-chunk with hl.dot for the matmuls (e.g. w @ state, k_adj.T @ diff), avoiding full chunk-sized matmuls in global memory.
Specialized sizes: K and V are hl.specialize(...) so the compiler can optimize for fixed dimensions.
Stable config: One helion.Config (e.g. num_warps=4, num_stages=2) for all shapes to stay within the leaderboard timeout while still being GPU-friendly.
So the main improvement is moving from a chunk-by-chunk Python loop with big PyTorch matmuls to one tiled Helion kernel that keeps the recurrence in small state and uses hl.dot for the core math.
2. gated_deltanet_chunk_fwd_o
Reference: Reshapes to chunks and does:
o_inter = (q_c @ h) * exp(g_c) (inter-chunk)
Full C×C qk = q_c @ k_c.T * exp(g_diff) with causal mask, then o = (o_inter + qk @ v_c) * scale
Large temporary tensors for the full chunk–chunk attention.
Improvements in submission:
Tiled over (BH, T) with block [1, C] so each program works on one chunk of time for one (b, h).
Same math, better mapping:
Intra-chunk: qk = hl.dot(q_tile, k_tile.T), causal mask and g_diff, then sim = where(causal, qk * exp(g_diff), 0) and local_out = hl.dot(sim, v_tile).
Inter-chunk: global_out = hl.dot(q_s, h[c_idx]) with q_s = q_tile * exp(g_vals).
Output: (global_out + local_out) * scale.
Helion dot primitives instead of large PyTorch matmuls, so the work is expressed as smaller, cache-friendly ops.
Config: e.g. num_warps=8, num_stages=4 for more parallelism on this matmul-heavy kernel.
So the improvement is preserving the exact chunk-fwd-o formula while executing it in a tiled, dot-based way that fits the GPU and avoids huge intermediates.
3. gated_deltanet_recompute_w_u
Reference: Reshapes to (B, NT, C, H, K/V) and does two batched matmuls:
u_c = A_c @ (v_c * beta_c)
w_c = A_c @ (k_c * (beta_c * exp(g_c)))
then permute/reshape back to (B, T, H, K/V).
Improvements in submission:
No big batched matmuls: the matmul is expressed as two explicit passes over the inner dimension ci in 0..C-1 and ci in C-1..0, each accumulating:
w_acc += a_col[:, None] * (k_ci * coeff_ci * decay_ci)[None, :]
u_acc += a_col[:, None] * (v_ci * coeff_ci)[None, :]
Averaging: w_out = (w_acc1 + w_acc2) * 0.5, u_out = (u_acc1 + u_acc2) * 0.5. That gives a symmetric (forward+backward) order of summation, which can improve numerical behavior (e.g. cancellation) compared to a single pass.
Tiling: over (B*H, T) with block [1, C], so each tile handles one chunk and the inner loop is over C with small accumulators (hl.zeros([rt, K]), hl.zeros([rt, V])), which can stay in registers or fast memory.
Config: e.g. num_warps=4, num_stages=2 for stability under the 12-minute leaderboard limit.
So the improvement is replacing one-shot batched matmuls with a tiled, two-pass accumulation that is both GPU-friendly and numerically more stable.
Cross-cutting improvements
Static shapes and configs: All three use static_shapes=True and SHAPE_CONFIGS keyed by (B, T, H, K, V) so the right kernel/config is chosen per shape without autotuning on the bot.
Single config for timeout: Comments note that B200-tuned or autotuned configs hit the 12-minute leaderboard timeout; using one “safe” config per kernel improves reliability.
IEEE dot precision: All use dot_precision="ieee" for correctness.
Optional ACF: Comments point to advanced_controls_file for further tuning (e.g. booster pack ACFs) once a baseline is correct and stable.
In short: the gated_deltanet submissions improve over the references by turning chunk-wise PyTorch loops and large matmuls into single, tiled Helion kernels that use small state, explicit dots, and (for recompute_w_u) a two-pass summed form for better numerics and GPU utilization.
README excerpt
# Helion Hackathon — High-Performance Fused ML Kernels **PyTorch Helion Hackathon** (March 14, 2026 · San Francisco) — [Cerebral Valley](https://cerebralvalley.ai/e/helion-hackathon) · [PyTorch Event](https://pytorch.org/event/helion-hackathon/) This entry showcases **fast, fused Helion kernels** that leverage PyTorch's kernel authoring DSL: minimal code, automatic autotuning, and performance that rivals hand-tuned Triton. All kernels are validated against PyTorch and benchmarked vs eager and `torch.compile`. ## Kernels | Kernel | Description | |--------|-------------| | **Fused Linear + ReLU** | Single kernel: `Y = ReLU(X @ W + b)`. Epilogue fusion avoids extra global memory round-trips. | | **Fused MatMul + LayerNorm** | `LayerNorm(X @ W)` in one kernel; reduces bandwidth and improves cache use. | | **Scaled dot-product attention (SDPA)** | Fused `softmax(Q @ K^T / sqrt(d)) @ V` in one Helion kernel — ~35 lines vs 120+ in raw Triton. | ## Why Helion - **PyTorch with tiles**: Same mental model as PyTorch; `hl.tile` defines the iteration space; tile sizes, loop order, and memory strategies are **autotuned**. - **One kernel, many configs**: A single Helion definition maps to a large space of Triton configs (block sizes, indexing, persistent kernels, etc.), so we get portability and speed without hand-writing search spaces. - **Fusion by design**: Epilogues (e.g. bias + ReLU, or LayerNorm) are expressed in Python and stay inside the same kernel, improving performance and