wai-quantum 0.5.1: neural-processor, matrix-extension, vector-unit, signal-processor and dataflow members #263
Merged
dcharlot
merged 15 commits from 2026-10-15 10:08:35 -04:00
wai/quantum-npu into main 2026-10-15
Merge remote-tracking branch 'origin/main' into wai/quantum-npu
All checks were successful
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Successful in 27s
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Successful in 15s
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Successful in 21s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m30s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 12m29s
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Successful in 24s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 24s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Successful in 24s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Successful in 19s
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Successful in 1m20s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 18s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 26s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 13s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 10s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 13s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m48s
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Successful in 12s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m2s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 13m52s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m23s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m21s
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Successful in 8m8s
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Successful in 1m5s
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Successful in 14s
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Successful in 21s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Successful in 15m0s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m49s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m33s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 5m43s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 2m51s
# Conflicts: # wai/CHANGELOG.md
ci: the signal-processor workflow's emulator variables are not QEMU_*
Some checks failed
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum-qpu / does this change touch it (pull_request) Has been cancelled
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Has been cancelled
wai-quantum matrix-extension member / does this change touch it (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Has been cancelled
wai-quantum CPU vector units / does this change touch it (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / does this change touch it (pull_request) Has been cancelled
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Has been cancelled
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been cancelled
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been cancelled
wai-web wasm32 / does this change touch it (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
qemu-user reads every QEMU_<option> environment variable as that option,
and QEMU_VERSION is -version: with the workflow's QEMU_VERSION=11.1.1 set,
the emulator printed its version and exited 0 without running anything.
So the bit-identity step found no test results and failed, and the
emulator check before it (the predicate-branch probe) passed without
having run. Reproduced: QEMU_VERSION=11.1.1 qemu-hexagon-11.1.1
/does/not/exist prints the version and exits 0.
The variables are HEXAGON_EMULATOR_VERSION and HEXAGON_EMULATOR_SHA256
now, and the probe's check requires the probe's own statement ("this
emulator branches on the low bit"), so an emulator that runs nothing
fails it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
scripts: no pipe into grep -q under pipefail
Some checks failed
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 50s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 2m6s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 1m25s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m13s
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Successful in 21s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Successful in 2m6s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Successful in 1m27s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Failing after 2m46s
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Successful in 18s
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Successful in 17s
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Successful in 19s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 17m2s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Successful in 20s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Successful in 35s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 33s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 28s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 36s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 15s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 18s
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 2m12s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m11s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m20s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m21s
wai-pack / wai-pack · linux (pull_request) Successful in 1m32s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 21s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m14s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m8s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m54s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 5m27s
`printf ... | grep -q` under `set -o pipefail` reports no match when grep exits at its first match while printf is still writing: printf dies of SIGPIPE and the pipeline's status is 141. The tests-in-CI self-test failed that way on the repository checks job (main shows the same job red on one commit and green on its neighbours), and check-lockfiles.sh classifies cargo's message the same way, so a timing accident could misread it. Each now reads a here-string, with nothing to break. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge main (with wai-quantum 0.5.0) into wai/quantum-npu
Some checks failed
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Has been cancelled
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Has been cancelled
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Has been cancelled
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been cancelled
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14
wai-quantum 0.5.1: review fixes
- The DSP workflow's x86_64 step looked for "hvx devices" after the rename to dsp; it could never pass. - The neural-processor member's mutants now go through the placement check the conforming model does (a mutant placed elsewhere is refused, never credited to the processor), and carry their own placement in the detail. - Its input arrays are written through the strides the runtime gives them, as its outputs are read. - Its compiled model is kept per model text and system build and reused, instead of recompiled per process and left in the temp directory; the source file is removed after compiling. - Its per-pair arithmetic allocates nothing (an array, and a lazy error). - The matrix-extension kernels declare the predicate registers they write. - A dataflow core that runs past its clock budget is a timeout, which may fall back to another member, not a defect. - The encoder's check against the assembler now covers the programs the device runs: the member's own layout, and every mutant's rows and probe. Verified: neural processor 9/9 on the M3 Ultra twice over one cache (both mutants placed and killed; one compiled model per text, nothing left in the temp directory); matrix extension 9/9 on M4 Max silicon; all seven device programs identical under the independent assembler. Co-Authored-By: Claude Opus 5.5 <[email protected]>
ci: the 0.5.1 member workflows run only when the pull request's own diff touches them
Neural processor, matrix extension, signal processor, vector units and the dataflow device gain the same gate as the other wai-quantum workflows. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge wai/quantum-0.5.0 (with main) into wai/quantum-npu
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum: the dataflow member, on 32 RISC-V cores of a simulated accelerator
The gate's fixed-point arithmetic on the first core of each of 32 compute tiles of a dataflow accelerator, two device generations (PCI 1e52:b140 and 1e52:401e), feature quantum_fabric_dataflow, class dataflow. - quantum_fabric::rv32: an RV32IM encoder and the gate's programs, built as machine words and as the listing they encode (the implementation id's input). Every 64-bit value is a pair of words: mul/mulh for products, sltu for carries and borrows, the arithmetic shift from word shifts. An independent assembler turns every listing, conforming and mutant, into the same words; examples/rv32_listing writes them for that check. - The host loads the device's library at run time (WAI_QUANTUM_DATAFLOW_LIB) and drives it as a PCI endpoint: reads the ids and the first memory window's base from configuration space, opens two windows per tile (its memory and its registers), holds the tiles' cores in reset, writes the program at the reset address and each tile's parameters and slice of the gate's pairs beside it, releases the first cores, clocks the device until every tile reports done, and reads the rows back in order. - Spreading a batch over 32 tiles: the library's cost per clock is mostly fixed, so 32 active cores run about 23 times as many instructions a second as one. Measured on the device's open-source simulator, built from source: both generations 9 of 9 device tests (66020 probe pairs, 2000 kernel cases, all four pinned certificates, circuits up to 20 qubits matching native, 3 of 3 mutants killed), 75 s and 108 s. Every certificate is labelled simulator. Workflow wai-quantum-dataflow.yml builds the simulator at a pinned commit, checks the encoder against the assembler, and runs both generations; the macOS runner finds no member and says why. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum: the CPU vector-unit members (avx2, sve, rvv)
The gate's fixed-point arithmetic in the processor's own vector extension, feature quantum_fabric_vector, class cpu: - avx2 (x86-64): 256-bit vectors of four 64-bit lanes; the exact signed 32x32 multiply of each lane's low word, and the 64-bit arithmetic shift the unit lacks built from a logical shift and the sign bit; - sve (aarch64) and rvv (riscv64): one assembly text each for every vector length (the length set per pass); the member reads the length from the unit and names it in its id and detail. Each member's id extends the CPU reference's, so with no energy figures placement keeps the reference. Three kernel mutants per instruction set are compiled in. Measured: avx2 on an x86-64 processor; sve at 128, 512 and 2048 bits and rvv at 128 and 1024 bits under the user-mode emulator. Every leg: 9 of 9 device tests, all four pinned certificates, circuits up to 20 qubits matching native, 3 of 3 mutants killed, and the length the member read is the one given. Apple silicon finds no member and says why. Workflow wai-quantum-vector.yml runs the six legs on the container runner and the absent case on the macOS runner. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum: the signal processor, and its vector unit as a member
The signal processor (DSP) as a processor: the bit-identity digests (23), the frame fixtures (2) and the byte-pinning library tests (137) pass for its Linux target under the user-mode emulator, the standard library built from source (a tier-3 target). Emulator releases before 11.0 test a whole predicate register, where the processor tests its low bit, in a branch on a predicate written in the same packet. Compiled code relies on the low bit (a predicate from a register's 1, xored with a comparison's 0xff, so 0xfe is "equal"), and one library test fails under such an emulator though the code is right. The probe ci/dsp/predicate_branch.c shows it; the workflow builds 11.1.1 from its release tarball (SHA-256 pinned, signature checked when pinned) and runs every suite on it. The member (feature quantum_fabric_dsp, class dsp): the gate's fixed-point arithmetic in the vector unit's 128-byte vectors, each 64-bit value a pair of words; the product is the unit's exact 32x32 multiply, and carries and borrows are bit logic on the words (the standard library's predicate-producing vector intrinsics do not compile in this release). Under emulation: 66020 probe pairs agree, 2000 kernel cases match run_words, all four pinned certificates are reproduced naming the emulator, circuits up to 20 qubits match native, 3 of 3 mutants are killed. Elsewhere the member is absent and says why. Workflow wai-quantum-dsp.yml runs all of it in a pinned container on the container runner. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum: the limb model in the portable format; f16_of at 2048
npu::onnx_limb_model writes the neural-processor member's program (one multiply, one sum over the last axis) as an ONNX opset-17 model with fp16 or int32 tensors, and npu::expand_i32 lays out the int32 inputs. The example npu_onnx writes both models, a batch of inputs and the exact products they must give, for a neural processor reached through a runtime that reads that format. Both models pass the full ONNX checker and give every product of a 16384-pair batch exactly on the reference runtime. Fix: f16_of(±2048) shifted by 10 - 11 and panicked in a debug build. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum 0.5.1: the matrix-extension member (SME), silicon and emulated
Co-Authored-By: Claude Opus 5.5 <[email protected]>