Skip to content

SuperSLM 1.10.0

Choose a tag to compare

@dansupergameprogrammer dansupergameprogrammer released this 30 Sep 16:16
· 353 commits to main since this release

SuperSLM 1.10.0

Released 2026-09-30.

SuperSLM 1.10.0 is a CPU speed release. Every output is bit-identical to 1.9.0: the same tokens,
the same save blobs, and the same axis digest on every tier and compiler. There is no change to the
C ABI, to any status or SslmGpuStatus ordinal, or to the save format, and no model artifact needs
reconversion. The GPU path is unchanged.

What changed

All of the speed-ups below apply only on the AVX2 and AVX-512 tiers. The scalar and SSE2 tiers run
the 1.9.0 code. Each fast path has a guard that admits only inputs where it is provably exact;
everything else takes the 1.9.0 code unchanged.

  • Tiled prefill GEMM. A prefill GEMM of 8 or more tokens runs a register-tiled kernel over
    weights packed per call, instead of one dot product per output cell. At 128 tokens, one layer of
    batched prefill runs about 1.5–1.6x faster (engine level, on a cloud host). On a Zen 2 desktop
    (AVX2), one measured operator (the 1.5B model's gate/up GEMM at 32 rows) runs 2.59x faster.
    Decode and prefills under 8 tokens are unchanged.

  • Hardware SHA-256 for the load-time integrity hash. When the CPU has the x86 SHA extensions,
    the hash runs on them. On a Zen 2 desktop, hashing the 510 MB Qwen2.5-0.5B model takes 0.31 s
    instead of 3.25 s. The digests are unchanged, and the portable hash remains the fallback.

  • Attention and per-row sites, one row at a time:

    • The sigmoid, residual-landing and norm sites use 256-entry per-row tables on rows of 512 or
      more.
    • Probability-times-value runs on 16-bit multiply-add.
    • The requantization funnel runs in 64-bit integer lanes (RequantRowWide).
    • The softmax row has a guarded fast path.
    • On QK-norm models (the Qwen3 path), the Q31 attention score is computed for all of a query
      head's keys in one call (QkQ31ScoreRow). On a Zen 2 desktop that costs 0.59 ms per token
      instead of 10.26 ms at 128 tokens, and 3.63 ms instead of 94.07 ms at 1,024 tokens.

    At Qwen2.5-0.5B depth (engine level, cloud host, AVX2), these save about 4.3 / 7.2 / 11.0 ms per
    prompt token at 128 / 512 / 1,024 tokens, and about 7.8 ms per decode token at context 300.
    CHANGELOG.md gives the per-step figures.

These are engine figures, not end-to-end figures for any consumer. How much faster a game gets
depends on how it drives prefill: a consumer that prefills one token per call gets the attention
and per-row savings but not the tiled GEMM's.

MSVC and clang-cl

On MSVC and clang-cl builds, the AVX-512 tier keeps the 1.9.0 code for the tiled GEMM and for the
attention and per-row sites until those paths have executed on such a build. Two switches turn
them on: SUPERSLM_TILED_AVX512_MSVC=1 and SUPERSLM_SITES_AVX512_MSVC=1. The AVX2 tier runs the
new code on every compiler.

Internal declarations

Five internal C++ declarations join the installed headers:

  • SitesKernel, SelectSitesKernel and DispatchSitesKernel in matmul.h;
  • RequantRowWide in intmath.h;
  • QkQ31ScoreRow in forward_sites.h.

They follow the pattern those headers already use (GemmPath, RequantTokenCodeWide,
QkQ31ScoreForTier). None of them is exported, and none is part of the C API.

Compatibility and required action

None. Every C ABI verb, struct, status ordinal and save format is unchanged. A blob saved by 1.10.0
is the same SSB5 blob 1.9.0 writes, and the two releases read each other's blobs. The FP-free
scan now accepts the three SHA-256 instructions (sha256rnds2, sha256msg1 and sha256msg2),
which are integer-only. The SHA-1 instructions stay rejected.

Verification

  • Bit-identity:
    • The axis digest's GLOBAL hash is identical on all ten Linux legs: auto, plus forced scalar,
      SSE2, AVX2 and AVX-512, each on GCC 13.3 and Clang 18.1.
    • Each slice's golden pins are generated from the v1.9.0 tag.
    • Save blobs and decoded tokens match 1.9.0 in each slice's blob protocol.
  • GitHub CI: green on the merged head 1cfe368, 78 of 78 checks. The forced AVX-512 suite ran
    on a runner that has AVX-512: 121,375 checks, 0 failures, with the AVX-512 kernels confirmed
    active.
  • Code reviews on a Zen 2 desktop (Windows, MSVC) of the tiled GEMM, the SHA-256 path and the
    attention and per-row sites: no bugs found. The review's two findings on the attention sites
    are fixed in this release.
  • Release machine (Zen 2 desktop, Windows, MSVC 19.33, RTX 2080 SUPER; AVX2, no AVX-512), at
    e4d263e:
    • CMake Release with the GPU on, built fresh: superslm_tests 131,772 checks, 0 failures,
      including the tiled GEMM cells (247 checks) and the attention and per-row site cells (91,714
      checks).
    • build.bat runs to completion: every gate passes, including its own superslm_tests step
      (126,934 checks, 0 failures) and the ABI header inventory.
    • The release gate's tests (tools/test_t2704_release_gate.py) pass, 4 of 4, after its two
      compiled diagnostics were rebuilt from e4d263e and re-pinned. CMakeLists.txt changed in
      this release, and the gate counts that as a changed build input. The commits after e4d263e
      change only that pin and this note.

Files changed

  • src/matmul.cpp, include/superslm/matmul.h: the tiled GEMM, prob·V and the sites kernel
    selection.
  • src/sha256.cpp, include/superslm/sha256.h: the hardware SHA-256 path.
  • src/intmath.cpp, src/forward/forward_sites.cpp, src/forward/checked_chain_funnel.cpp,
    include/superslm/intmath.h, include/superslm/forward_sites.h: the attention and per-row sites.
  • include/superslm/gpu_layer_loop_guards.def: line citations moved with forward_sites.cpp
    (comments only). src/bad_alloc_wrap.h: the tiled path's packing-buffer allocation.
  • tests/ci/check_fp_free_scan.py: the three SHA-256 instructions.
  • tools/ci/branch_coverage_floors.json: the src/matmul.cpp and src/intmath.cpp floors are
    pinned from a CI run on a runner without AVX-512, where the AVX-512 bodies cannot execute.
  • CMakeLists.txt, tests/install-consumer/CMakeLists.txt, README.md, CHANGELOG.md and this
    note: version 1.10.0.
  • tests/data/t2704_release_manifest.json, tools/test_t2704_release_gate.py: the release gate's
    compiled diagnostics, re-pinned to e4d263e.