Instructions to use SuperexponentialAI/relu with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Kernels
How to use SuperexponentialAI/relu with Kernels:
# !pip install kernels from kernels import get_kernel kernel = get_kernel("SuperexponentialAI/relu") - Notebooks
- Google Colab
- Kaggle
This is the repository card of SuperexponentialAI/relu. It was built to
be used with the kernels library.
How to use
# make sure `kernels` is installed: `pip install -U kernels`
from kernels import get_kernel
kernel_module = get_kernel("SuperexponentialAI/relu", version=3)
relu = kernel_module.relu
relu(x)
Available functions
relu
Scope
This build covers cpu, cuda, and xpu only. metal and rocm are
declared in kernels-community/relu upstream but are intentionally
not included here β no Apple or AMD hardware was available to build
or validate them, and this repo only ships backends that were actually
optimized and benchmarked.
Each included backend supports fp32, fp16, bf16, and int8 (upstream
kernels-community/relu is fp32-only). Semantics match upstream exactly,
including NaN β 0 (not PyTorch's NaN β NaN) β this is a pre-existing
upstream behavior, intentionally preserved. All backends verified
bit-identical to torch.nn.functional.relu on non-NaN inputs.
Optimizations
Results at a glance
GPU rows: nsys GPU-kernel duration or the official harness with matched
buffer handling, 3+ passes, correctness-gated (bit-identical to
F.relu). Upstream (kernels-community/relu) is fp32-only, so other
dtypes have no Hub baseline. v3 corrects earlier 4090 claims (fp16/
bf16 "1.85x/1.81x", fp32 "1.20x DRAM") that came from a position-biased
shared-buffer interleave, and fixes a real (32 MiB, L2] launch-config
cliff β full story in L2_BAND_CLIFF.md; methodology in
PERFORMANCE.md.
| target | dtype | vs torch | vs upstream Hub |
|---|---|---|---|
| RTX 4090 (sm_89) | fp32 | ~parity (0.95β1.09x) | 0.96β1.22x L2, parity DRAM |
| RTX 4090 | fp16 / bf16 | 1.17β1.27x base, ~parity large | β |
| RTX 4090 | int8 | 1.14β1.37x | β |
| H100 (sm_90) | fp32 | 1.52x L2, ~parity DRAM | 1.24β1.44x DRAM |
| H100 | fp16 / bf16 | 1.38x L2, ~1.0β1.20x DRAM | β |
| H100 | int8 | 1.23β1.61x | β |
| CPU (i9-13900K) | fp32/fp16/bf16/int8 | at DRAM bandwidth ceiling | β |
| XPU (UHD 770) | fp32/fp16/bf16/int8 | 1.01x / 0.96x / 1.16x / 1.06x | β |
CUDA (sm_70βsm_90, benchmarked on RTX 4090 / Ada and H100 / Hopper)
float4-vectorized, flat grid-stride, scalar tail, arch-adaptive launch:
128-thread blocks below 32 MiB working sets, 512 above; streaming
__ldcs/__stcs except in the pre-Hopper (32 MiB, L2] band, which
uses default loads + streaming stores (v3 fix β evict-first loads there
ran 0.34β0.65x vs torch by discarding L2 input residency; see
L2_BAND_CLIFF.md), and Hopper+ below 16 MB, which uses unroll-2 /
stream-store-only / 256-thread blocks (+4.6β9.3%, symmetric pairwise
A/B). int8 additionally uses __vmaxs4 SIMD byte-max. Tuned via
per-arch empirical sweeps, a 5-agent design fan-out, and roofline
analysis (OPTIMIZATION.md for sm_89, H100_BENCHMARK.md for sm_90 β
including which standalone-sweep "wins" failed in-harness verification
and were not shipped).
- 4090 vs
torch.relu(v3, fair buffer handling β seeL2_BAND_CLIFF.mdfor why v2's shared-buffer interleave numbers were retracted): fp32 ~parity at every size (0.95β1.09x, both at the ~944 GB/s DRAM wall when DRAM-bound); fp16/bf16 1.17β1.27x at 1024Β², ~parity at 4096Β²; int8 1.14β1.37x. In the band the v2 kernel lost 2β3x, v3 measures 0.99β1.06x. - 4090 vs upstream
kernels-community/relu(fp32, bit-identical output): 0.96β1.22x at L2-resident sizes (run-sensitive), parity at the DRAM wall β both kernels saturate GDDR6X there. Upstream's real gaps are dtype coverage (fp32-only) and the 1-D launch collapse below. - fp16/bf16/fp8/int8 element throughput scales with the memory-bound
1/sizeof(dtype) rule: bf16/fp16 β 2x fp32, int8/fp8 β 4x fp32
intrinsically (
DTYPE_THROUGHPUT.md).
H100 80GB HBM3 (sm_90) β same method (nsys GPU-kernel duration,
interleaved 1:1, 3 independent passes, H100_BENCHMARK.md):
- DRAM-bound, this kernel runs at the HBM3 wall (~3.0 TB/s, ~90% of peak). The upstream Hub kernel never reaches it (2.2β2.4 TB/s), so the DRAM-bound margin is real and position-insensitive: 1.24β1.44x vs upstream (fp32 4096Β²/8192Β²).
- vs
torch(separate-buffer symmetric pairs): fp32 1.52x at L2-resident 1024Β², ~parity DRAM-bound (both at the wall); fp16/bf16 1.38x at 1024Β², 1.0β1.20x at 4096Β²; int8 1.23x at 1024Β², 1.61x at L2-resident 4096Β². The pre-Hopper L2-band cliff does not occur on Hopper (measured 1.43β1.55x over torch at band sizes with the streaming config;L2_BAND_CLIFF.md). - Robustness: this kernel's launch is shape-agnostic. The upstream Hub
kernel launches
grid = numel/size(-1)blocks, which collapses to a single block on flat 1-D tensors β measured 140x slower than this kernel at 4096Β² elements on H100 (relu(x.view(-1))-shaped calls).
CPU (benchmarked on i9-13900K)
Rewritten with AVX2, OpenMP, and non-temporal stores; extended to fp16/bf16/int8. A thread/ILP sweep confirmed the implementation sits at the memory-bandwidth ceiling rather than being compute- or thread-count-limited.
XPU (SYCL, validated on Intel UHD 770 iGPU)
Vectorized to 16 bytes/work-item for coalesced access, extended to fp16/bf16/int8. Hits the DDR5 bandwidth wall on all dtypes tested; int8 measured 2.6x the naive (non-vectorized) SYCL implementation.
Live comparison vs torch.relu (torch 2.12.0+xpu, Intel UHD 770 β
a consumer iGPU, not an officially-supported PyTorch XPU tier; both
implementations are bound by the same shared-DDR5 wall, so gains are
modest compared to CUDA/CPU):
| dtype | torch (GB/s) | ours (GB/s) | ratio (ours vs torch) |
|---|---|---|---|
| fp32 | 40.6 | 40.8 | 1.01x (tied) |
| fp16 | 43.8 | 42.1 | 0.96x (torch ~4% faster) |
| bf16 | 36.6 | 42.5 | 1.16x faster |
| int8 | 78.0 | 82.9 | 1.06x faster |
All four dtypes verified bit-identical to F.relu. See AITESTING.md
for the environment setup and hardware-driver caveats needed to run
this (a separate torch==2.12.0+xpu venv, Level Zero runtime install,
device ACLs, and a CPU-generate-then-copy workaround for an on-device
fp16/bf16 creation bug on this GPU).
Benchmarks
Official-harness scripts live in benchmarks/: ReluBenchmark mirrors
upstream's fp32 base/large workloads (directly comparable), and
ReluDtypeBenchmark adds the fp16/bf16/int8 workloads upstream lacks.
- Local checkout:
kernels benchmark ./relu-build(all workloads verify againstF.relu). - Remote (
kernels benchmark SuperexponentialAI/relu --version 3) requires this repo to be hosted as akernel-type repo; it is currentlymodel-type (kernel-repo creation is restricted for this account), so use the local form until it migrates. The same caveat applies to theget_kernelsnippet above β load viasnapshot_download+sys.pathin the meantime.
ReluDtypeBenchmark uses the kernel's preallocated out= form and times
the reference the same way β the allocating form alternates two live
output blocks and pushes L2-boundary workloads off the L2 cliff for
whichever side allocates (details in L2_BAND_CLIFF.md). For pure GPU
kernel time, the nsys numbers above remain the ground truth
(INVESTIGATION_L2.md).
Full methodology and results: see OPTIMIZATION.md, DTYPE_THROUGHPUT.md,
and INVESTIGATION_L2.md in this repository.
Upstream
The original source code for this kernel comes from kernels-community/relu.
- Downloads last month
- 49