Report · Sep 26, 2026 · Glyd
Against DFloat11 and ZipServ on an RTX 4080 SUPER
Qwen3-8B on a 16 GB RTX 4080 SUPER: Glyd generates 2.5 to 3.4 times DFloat11's tokens a second at the same size, and its kernels keep pace with ZipServ's.
Glyd is not the only lossless format for model weights. DFloat11 and ZipServ also keep every weight bit for bit at about 11 bits instead of 16. This report runs them on the same 16 GB RTX 4080 SUPER; the wider picture is on related work.
Three lossless formats
| Method | Bits a weight | Same model? |
|---|---|---|
| Glyd (2026) | 10.9 / 12.0 | Yes, bit for bit |
| DFloat11 (NeurIPS 2025) | 10.9 | Yes, bit for bit |
| ZipServ (ASPLOS 2026) | 11.4 | Yes, bit for bit |
| 4-bit quantization (GGUF Q4, AWQ, GPTQ) | 4 + scales | No, rounded: smallest by far, and its answers change |
Bits a weight on Qwen3-8B: the whole model for Glyd’s two layouts and DFloat11, the matrices for ZipServ.
End to end against DFloat11
Qwen3-8B takes 16.38 GB in bf16, which leaves no room to run on a 16 GB card. Both DFloat11 and Glyd hold its weights in about 11.2 GB.
| Sequences a step | DFloat11, tokens/s | Glyd, tokens/s | Glyd against DFloat11, × |
|---|---|---|---|
| 1 | 13.8 | 47.2 | 3.4 |
| 8 | 104.7 | 360.2 | 3.4 |
| 32 | 387.5 | 1,268.6 | 3.3 |
| 64 | 746.2 | 1,897.2 | 2.5 |
| Sequences a step | DFloat11 | Glyd |
|---|---|---|
| 1 | 13.8 | 47.2 |
| 8 | 104.7 | 360.2 |
| 32 | 387.5 | 1,268.6 |
| 64 | 746.2 | 1,897.2 |
The matrix multiply against ZipServ and cuBLAS
The comparison with ZipServ is product against product: Qwen3-8B’s layer 18 matrices, microseconds a call with the L2 cache flushed, as ZipServ times itself. Lower is better; Glyd’s time in bold where it is the fastest.
| Bits a weight | 1 token, µs | 16 tokens, µs | 32 tokens, µs | 64 tokens, µs | |
|---|---|---|---|---|---|
| q_proj, o_proj (4096 × 4096) | |||||
| cuBLAS, bf16 | 16.00 | 73 | 73 | 74 | 77 |
| ZipServ | 11.35 | 57 | 57 | 58 | 69 |
| Glyd | 10.81 | 56 | 58 | 62 | 73 |
| k_proj (1024 × 4096) | |||||
| cuBLAS, bf16 | 16.00 | 23 | 27 | 26 | 28 |
| ZipServ | 11.43 | 22 | 23 | 23 | 25 |
| Glyd | 10.83 | 19 | 21 | 24 | 30 |
| gate_proj (12288 × 4096) | |||||
| cuBLAS, bf16 | 16.00 | 175 | 204 | 235 | 225 |
| ZipServ | 11.35 | 151 | 152 | 155 | 162 |
| Glyd | 10.76 | 144 | 148 | 153 | 172 |
| down_proj (4096 × 12288) | |||||
| cuBLAS, bf16 | 16.00 | 176 | 208 | 228 | 214 |
| ZipServ | 11.35 | 153 | 154 | 155 | 187 |
| Glyd | 10.75 | 147 | 150 | 153 | 181 |
Glyd is the fastest of the three in 10 of the 16 cells, and ZipServ in the other 6. Glyd ran its smallest layout at 1 to 32 tokens and its 12-bit layout at 64. ZipServ’s log · Glyd’s log
Against bf16 on the same card
For scale, Glyd against bf16 itself on this GPU: Qwen2.5-7B-Instruct, GPU time a token after the prompt, with q, k, v and gate, up merged as vLLM runs them.
| Sequences a step | bf16, ms | Glyd, ms | Change, % |
|---|---|---|---|
| 1 | 21.97 | 16.52 | −25 |
| 8 | 22.85 | 17.37 | −24 |
| 32 | 26.19 | 18.80 | −28 |
| 64 | 27.67 | 25.14 | −9 |
Method
- End to end: tokens per second generating with Qwen3-8B, DFloat11 and Glyd on the same RTX 4080 SUPER.
- Kernels: microseconds a call of each matrix product with the L2 cache flushed, as ZipServ times itself.
- Against bf16: GPU time a token after the prompt, over 16 steps; q, k, v as one product and gate, up as another, for bf16 and Glyd alike.
- Exactness: every matrix packed, unpacked and compared bit for bit.
The logs of every run are in the repository, under benchmarks/gpu; how the harness is run: the GPU docs.