wai-quantum 0.6.8: threads only where they pay, and a cut-rank search that recounts only what moved #348

Merged
dcharlot merged 4 commits from wai/quantum-0.6.8 into main 2026-10-20 03:13:03 -04:00
Owner

wai-quantum 0.6.8. Two speed changes. Neither moves a bit of any result: every kernel path gives the same bits at any thread count, and tests/bit_identity (23 pinned digests) passes.

State-vector threads only where they pay

A gate, a slice pass or a fixed-chunk sum now spawns at most one thread per 2¹⁸ amplitudes (threads_for).

  • Each pass spawns its threads afresh, so below that size a thread costs more than its share of the work.
  • On the shared 32-core build host, with the old rule (threads from 2¹⁴ amplitudes up), a gate ran 5 to 14 times slower than on one thread at 14 to 18 qubits (gate_timings, an ignored test that prints the times).
  • A count a test forces is taken as it is, so threading_never_changes_a_bit still exercises the split paths at 16 qubits.
  • The noisy suite (--lib quantum_noisy) now runs all 13 tests in about 20 s. One of them alone took 211 s before.

A cut-rank search that recounts only what moved

  • ProductMeasured::anneal_order moves one qubit at a time. Seven moves in eight go at most four places, the rest anywhere.
    • Only the cuts between the two places are recounted, about a ninth of a full recount.
    • On the 70-qubit graph-state circuit, 300,000 moves reach a 29-bit widest cut in about 6 s.
    • In tests, every move's recounted cuts are asserted equal to a full recount.
  • The service's cutrank method:
    • The planner makes one short search, enough to bound memory and work.
    • The run searches up to 300,000 moves from each of four seeds on threads of their own, with the planner's order among the candidates.
    • It keeps the cheapest order no wider than the planner's at its widest cut, so a job stays inside the memory it was admitted with.
    • On the live 70-qubit job, the planner's order had a widest cut of 31 bits.
  • The READMEs describe the two-stage search, and the anneal command moves to 300,000 moves.

Checked on the build host

  • check-lockfiles;
  • --lib quantum_sv (8 passed), quantum_cutrank (7), quantum_noisy (13), --test bit_identity (23);
  • the service's tests (64) and clippy.

The public-text checks are clean.

🤖 Generated with Claude Code

**wai-quantum 0.6.8.** Two speed changes. Neither moves a bit of any result: every kernel path gives the same bits at any thread count, and `tests/bit_identity` (23 pinned digests) passes. ### State-vector threads only where they pay A gate, a slice pass or a fixed-chunk sum now spawns at most one thread per `2¹⁸` amplitudes (`threads_for`). - Each pass spawns its threads afresh, so below that size a thread costs more than its share of the work. - On the shared 32-core build host, with the old rule (threads from `2¹⁴` amplitudes up), a gate ran 5 to 14 times slower than on one thread at 14 to 18 qubits (`gate_timings`, an ignored test that prints the times). - A count a test forces is taken as it is, so `threading_never_changes_a_bit` still exercises the split paths at 16 qubits. - The noisy suite (`--lib quantum_noisy`) now runs all 13 tests in about 20 s. One of them alone took 211 s before. ### A cut-rank search that recounts only what moved - **`ProductMeasured::anneal_order`** moves one qubit at a time. Seven moves in eight go at most four places, the rest anywhere. - Only the cuts between the two places are recounted, about a ninth of a full recount. - On the 70-qubit graph-state circuit, 300,000 moves reach a 29-bit widest cut in about 6 s. - In tests, every move's recounted cuts are asserted equal to a full recount. - **The service's `cutrank` method:** - The planner makes one short search, enough to bound memory and work. - The run searches up to 300,000 moves from each of four seeds on threads of their own, with the planner's order among the candidates. - It keeps the cheapest order no wider than the planner's at its widest cut, so a job stays inside the memory it was admitted with. - On the live 70-qubit job, the planner's order had a widest cut of 31 bits. - **The READMEs** describe the two-stage search, and the anneal command moves to 300,000 moves. ### Checked on the build host - `check-lockfiles`; - `--lib quantum_sv` (8 passed), `quantum_cutrank` (7), `quantum_noisy` (13), `--test bit_identity` (23); - the service's tests (64) and clippy. The public-text checks are clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The planner's one search (about a second) bounds the job's memory and work.
The run searches up to 300 000 moves from each of four seeds on threads of
their own, with the planner's order among the candidates, and keeps the
cheapest order whose widest cut is no wider than the planner's. The wai-quantum
README's anneal command moves to 300 000 moves, which reach a 29-bit widest cut
on the 70-qubit circuit in a few seconds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum 0.6.8: the changelog entry, and the version in every lockfile that pins it
All checks were successful
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 41s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 3m54s
wai-pack / wai-pack · macos (pull_request) Successful in 1m0s
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Successful in 12s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Successful in 8m2s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Successful in 28s
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Successful in 1m5s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 17s
wai-quantum Metal member / member · Metal (macos) (pull_request) Successful in 25s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 25s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 12s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Successful in 13m43s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 11s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 15s
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Successful in 19s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m8s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m5s
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Successful in 5m34s
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Successful in 19s
wai-quantum service / service · macos (pull_request) Successful in 30s
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Successful in 9s
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Successful in 13s
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Successful in 12s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m15s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m11s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m17s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m30s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m46s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m16s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 3m47s
c7df1dd5a0
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!348
No description provided.