Skip to content

SuperSLM 1.8.1

Choose a tag to compare

@dansupergameprogrammer dansupergameprogrammer released this 25 Sep 16:55
· 424 commits to main since this release
e0d56fd

SuperSLM 1.8.1

Released 2026-09-25.

SuperSLM 1.8.1 is a single diagnostic fix on the CPU path: the four per-site saturation counts
travel with the saturation total they sum. No token, status, ABI surface, SslmGpuStatus ordinal,
save format or measured figure changes from 1.8.0, and no model-artifact reconversion is required.

What changed

SequenceLayerState carries a saturation total, kv_saturation_count, and the four per-site counts
it sums: kv_landing_saturation_count, k_channel_landing_saturation_count,
rope_q_saturation_count and rope_k_saturation_count. RunLayerLoop, the path decode uses,
already kept the four in step with the total. Two CPU ABI paths did not:

  • Prefix adoption. sslm_seq_adopt_prefix copied the prefix's total but left the adopting
    sequence's four per-site counts at whatever the sequence held before. They now come from the
    prefix, like the total.
  • Prefill. sslm_prefill and sslm_prefix_prefill run through PrefillWholeTokens and
    RunLayerLoopChunkBatched, which grew the total without being handed the four per-site
    out-parameters, so a prefilled sequence's per-site counts no longer summed to its total. They are
    now passed, and the counts are filled.

Neither path changes a token: the counters are written beside the arithmetic, never read by it.

Compatibility and required action

None. Every C ABI verb, struct and status ordinal is unchanged from 1.8.0. The per-site counts are
internal SequenceLayerState fields, not part of the public ABI.

One limit is unchanged and stated here so it is not mistaken for part of this fix: sslm_seq_save
records only the saturation total, so a sequence restored with sslm_seq_restore has its total and
per-site counts of 0, so after a restore the per-site counts no longer sum to the total. Carrying them would change the save format, which this release does not do.

Verification

  • Red first: two cells, one for adoption and one for prefill (both sslm_prefill and
    sslm_prefix_prefill), failed 6 checks against 1.8.0's engine for the reasons above. The prefill
    prompt saturates 5 times on the committed fixture, so the prefill cell cannot pass on zeros.
  • Linux, GCC 13 Release: superslm_tests 0 failures; all 15 ctest entries pass; ASan and UBSan 0
    failures; Clang 18 forced SSE2, AVX2 and AVX-512 tiers 0 failures each.
  • Windows, MSVC: CMake Release superslm_tests 34,759 checks and build.bat's superslm_tests
    step 34,753 checks, 0 failures each; the four Windows CI ctest cells pass. With the engine fix
    reverted, 6 failures, all in the new cells.
  • GPU, TE-425 suite on the dev-box device: every one of 119 jobs gave the same verdict as the
    1.8.0 exit check. src/gpu/ is unchanged by this release.

Files changed

  • src/sslm_abi.cpp -- adoption copies the four per-site counts; prefill passes them to
    RunLayerLoopChunkBatched. Adds a test-only SslmPrefixLiveStateForTest accessor beside the
    existing SslmSeqLiveStateForTest, compiled only in the test-injection build.
  • tests/test_slm18x_saturation_census.cpp -- new: the two cells above, in their own unit because
    the C ABI header's constants collide with test_main.cpp's Windows-only using enum SslmGpuStatus.
  • tests/test_main.cpp, CMakeLists.txt, build.bat -- wire the new unit into superslm_tests
    and the three forced-tier test builds; build.bat's superslm_tests step links sslm_abi.cpp and
    the four damped_greedy sources, as CMake already did.
  • CMakeLists.txt, tests/install-consumer/CMakeLists.txt, README.md, CHANGELOG.md, this
    note -- version 1.8.1.