Skip to content

Instantly share code, notes, and snippets.

ConSan Synchronization Identities and the SGEMM Scalability Gap

What is a synchronization identity?

ConSan assigns a stable textual identity to each synchronization event found while analyzing a GPU code object. A representative identity has this shape:

fnv1a64:<code-object-fingerprint>
|kernel=

Current matrix

Every workload retained in the active matrix is simultaneously green. Final audit artifact consan-validation-gfx1250-final-audit-149 reruns every one of the 40 cells at committed tip 9acc4dd9b0 with one hook identity. Cell text reports progress within blue; successful process launch or focused unit coverage alone does not promote a cell.

| Workload | SuperCollider | Record/Replay | Sampled | Inline Shadow |

@bjacob
bjacob / STATUS_GFX1250.md
Created July 19, 2026 12:13
STATUS_GFX1250.md

ConSan gfx1250 status

This is the gfx1250 workload × instrumentation evidence ledger. It follows the acceptance standard of STATUS_RDNA4.md, but inherits no coverage denominator, machine-code identity, fault expectation, timing, provenance, or green cell from another architecture.

The executable authority is consan_validation.py, with the experiment contract described by VALIDATION.md. Porting work

RocJitsu vs. FFM gfx1250 benchmark

Measured on 2026-07-19 using the same gfx1250 workload binaries and the workspace TheRock ROCm runtime. Each reported row passed its independent correctness oracle. FFM used its default worker configuration; forcing eight workers was separately found to cause severe slowdowns and is not represented in the table.

Test RocJitsu FFM Comparison
@bjacob
bjacob / a.md
Created July 16, 2026 01:53
a.md
Priority workload SuperCollider Record/Replay Sampled Inline Shadow
P0 Qwen3-0.6B prefill 🟩 20/20; clean + exact-fault trap; overhead: 1.0x 🟩 20/20; clean + qualified miss; overhead: 1.0x 🟩 20/20; clean + measured statistical detection; repeated-dispatch metadata hardening tracked; overhead: 1.0x 🟩 20/20; clean + attributed diagnostic; overhead: 1.0x
P1 Sharktank TP1 prefill 🟩 Clean 352/352; exact pair removal is a schedule-masked qualified miss; instability marker retained; overhead: 1.1x 🟩 Clean 352/352 + 92/92 barriers; exact pair removal corrupts oracle, qualified replay miss; overhead: 1.7x 🟩 Clean 352/352; exact pair removal is a schedule-masked qualified miss; four unpatched supported barriers are decode-only; overhead: 1.0x 🟩 Clean 352/352 + 92/92; exact pair removal emits an attributed diagnostic; overhead: 4.4x
P1 Sharktank TP1 decode/combined 🟩 Clean 352/352; exact pair removal is a schedule-masked qualified miss; c
Priority workload SuperCollider Record/Replay Sampled Inline Shadow
P0 Qwen3-0.6B prefill 🟩 20/20; clean + exact-fault trap; overhead: 1.0x 🟩 20/20; clean + qualified miss; overhead: 1.0x 🟩 20/20; clean + measured statistical detection; repeated-dispatch metadata hardening tracked; overhead: 1.0x 🟩 20/20; clean + attributed diagnostic; overhead: 1.0x
P1 Sharktank TP1 prefill 🟩 Clean 352/352; exact pair removal is a schedule-masked qualified miss; instability marker retained; overhead: 1.1x 🟩 Clean 352/352 + 92/92 barriers; exact pair removal corrupts oracle, qualified replay miss; overhead: 1.7x 🟩 Clean 352/352; exact pair removal is a schedule-masked qualified miss; four unpatched supported barriers are decode-only; overhead: 1.0x 🟩 Clean 352/352 + 92/92; exact pair removal emits an attributed diagnostic; overhead: 4.4x
P1 Sharktank TP1 decode/combined 🟨 Clean decode + combined; 352/352; instability marker 🟨 Clean decode +
Priority workload SuperCollider Record/Replay Sampled Inline Shadow
P0 Qwen3-0.6B prefill 🟩 20/20; clean + exact-fault trap; overhead pending refresh 🟩 20/20; clean + qualified miss; overhead pending refresh 🟩 20/20; clean + measured statistical detection; overhead pending refresh 🟩 20/20; clean + attributed diagnostic; overhead pending refresh
P1 Sharktank TP1 prefill 🟨 Clean 352/352; instability marker 🟨 Clean 352/352 + 92/92 barriers 🟨 Clean 352/352 + 18/22 barriers; automatic standard sampling profile 🟨 Clean 352/352 + 92/92; dynamic undercoverage
P1 Sharktank TP1 decode/combined 🟨 Clean decode + combined; 352/352; instability marker 🟨 Clean decode + combined; 352/352 + 92/92 🟨 Clean decode + combined; 352/352 + 18/22 barriers; automatic standard sampling profile 🟨 Clean decode + combined; 352/352 + 92/92; dynamic undercoverage
P2 Sharktank TP2 family 🟨 Clean 992/992; instability marker 🟨 Clean 992/992 +
Priority workload SuperCollider Record/Replay Sampled Inline Shadow
P0 Qwen3-0.6B prefill 🟩 20/20; clean + exact-fault trap; overhead pending refresh 🟩 20/20; clean + qualified miss; overhead pending refresh 🟩 20/20; clean + measured statistical detection; overhead pending refresh 🟩 20/20; clean + attributed diagnostic; overhead pending refresh
P1 Sharktank TP1 prefill 🟨 Clean 352/352; instability marker 🟨 Clean 352/352 + 92/92 barriers 🟨 Clean 352/352 + 18/22 barriers; automatic standard sampling profile 🟨 Clean 352/352 + 92/92; dynamic undercoverage
P1 Sharktank TP1 decode/combined 🟨 Clean decode + combined; 352/352; instability marker 🟨 Clean decode + combined; 352/352 + 92/92 🟨 Clean decode + combined; 352/352 + 18/22 barriers; automatic standard sampling profile 🟨 Clean decode + combined; 352/352 + 92/92; dynamic undercoverage
P2 Sharktank TP2 family 🟨 Clean 992/992; instability marker 🟨 Clean 992/992 +

Thanks for freezing the DAG. That is the reasonable thing to do now. You can take the next 2 hours to fully wrap up. It's 7 AM now; you can take until 9 AM if necessary.

Can you help me understand: What is the shape of the useful new scope that you kept discovering? Did you literally find new bugs in existing code that were only discovered by the new testing scope? Or was it more like pulling threads?

Both happened, but the dominant pattern was: New tests found literal bugs; fixing or validating each bug exposed a deeper missing invariant. Some concrete examples:

  • Real optimized binaries found actual preservation bugs:
    • SuperCollider clobbered live v3 in the shared atomicAdd helper.
  • Stream-K analysis decoded executable padding as instructions.
@bjacob
bjacob / README.md
Created July 14, 2026 02:12
Why the ConSan diff became large during the LLM fault-injection campaign

Why the ConSan diff became large during the LLM fault-injection campaign

The scope increase was not simply the predictable result of “more tests.” The new iree-test-suites/LLM corpus and systematic bug injection invalidated several assumptions under which the earlier ConSan prototype appeared usable. Small kernels had spare registers, simple code-object ownership, familiar LDS barriers, and faults that could be represented by dropping one instruction. Production IREE models instead supplied register-saturated kernels, multiple processes and code objects, mixed FLAT/VGLOBAL/LDS operations, subtle atomic protocols, and enough runtime complexity that a run could look successful even when no intended kernel had been instrumented. Fault injection then made semantic incompleteness observable: an engine could run cleanly yet miss a wrong address, weakened ordering, failed compare-exchange, or slightly displaced barrier. The resulting work is the machinery needed to make the original claim—usable end-to-end conc