Transaction Science
c6002701b0
wai-quantum: the cut-rank table on the GPU, and the engine's cutrank_single method
...
quantum_cutrank_metal (feature quantum_cutrank_metal, macOS) runs the cut-rank walk's
passes on the platform's GPU:
- each shot's table is 2^cut single-precision entries in one shared buffer, at most
2^31 a table, so every index fits in 32 bits;
- each pass is one dispatch over (entry, shot), in the walk's order and with its
arithmetic, done in f32; the passes are the same for every shot, and only each
shot's weights (set by the outcomes it drew) differ, read from a small per-shot
array; an amplitude is every pass encoded into one command buffer;
- a sample's sums are reduced per threadgroup on the device (a SIMD-group sum, then the
groups in order) and added on the host in f64, in order, for each shot; the outcome
is drawn as the host's walk draws it (outcome_norm and draw, now shared by both);
- a batch of shots is sampled side by side, so a qubit is one command buffer for the
batch: the previous qubit's passes for each shot's outcome, then this qubit's sums;
- each shot draws from a stream of its own, so a seed's samples are the same at any
batch size.
The kernels are compiled in the platform's safe math mode, so a run is the same bits
on one device. Tests hold it to the double-precision walk on states of 10 to 34
qubits: amplitudes within 1e-5 of each amplitude's size and the same bits run to run;
samples whose probabilities are their own and whose counts follow them; and the same
samples one at a time and seven side by side. Without a device the tests skip;
WAI_QUANTUM_CUTRANK_METAL_EXPECT makes that a failure, and the service workflow's
macOS job sets it and checks both GPU tests by name.
The engine's cutrank_single method runs a cutrank job on that table where the build
has the feature and the host a GPU; auto never picks it. It samples up to 32 shots a
batch, as many as 2 GiB beside its first table holds within the job's memory, and the
plan counts them. Its amplitudes carry the circuit's global phase, found on the same
table (catalog::cutrank_phase_with takes the amplitude function). The job service, the
command line's metal feature and the desktop app's metal feature build it in. The
service's schemas list it, and it marks the method's energy figure partial, since the
counter does not read the GPU.
examples/cutrank_gpu times one state's amplitudes and samples on the host's tables and
on the GPU, and each kernel's pass alone. On a shared desktop machine, each device at
its quietest (either side ran up to five times slower under other work), seconds for
one amplitude of a random graph state:
widest cut host, double host, single GPU
23 bits 0.027 0.024 0.005
25 bits 0.057 0.045 0.019
27 bits 0.18 0.17 0.046
29 bits 1.03 0.54 0.34
and for 64 samples, 16 a batch, the host at about half its quietest speed:
widest cut host, single GPU, one at a time GPU, 16 a batch
16 bits 0.52 0.62 0.036
20 bits 1.97 0.73 0.067
23 bits 3.87 0.91 0.34
25 bits 7.48 1.82 1.20
A pass runs at about 550 GB/s on an idle device.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
(cherry picked from commit f7c7160a9ab5a6255c28d34af57ee2fbc017b055)
2026-10-20 17:34:17 -04:00
..
engine
wai-quantum: the cut-rank table on the GPU, and the engine's cutrank_single method
2026-10-20 17:34:17 -04:00
quantum_fabric
wai-quantum: the tensor-engine member's kernel compiles for a device
2026-10-17 11:17:34 -04:00
quantum_toolchain
wai-quantum 0.5.0: provenance, sampling members, device programs, OpenCL, a simulated FPGA, f64 on accelerators, and QPU clients
2026-10-14 09:02:11 -04:00
repro
wai-quantum 0.3.24: fault-tolerant resource estimation, reproducible and signed
2026-10-02 00:26:13 -04:00
gates.rs
wai-quantum 0.3.28: the dense state vector at any angle, the same bits threaded or not
2026-10-04 17:01:39 -04:00
ijson.rs
wai-quantum circuit2: the number range decided on the literal's digits in both readers
2026-10-09 18:50:35 -04:00
lib.rs
wai-quantum: the cut-rank table on the GPU, and the engine's cutrank_single method
2026-10-20 17:34:17 -04:00
linalg.rs
wai-quantum: MPS two-site split by the Gram eigenvectors (Householder + QL), no division by singular values
2026-10-17 12:07:42 -04:00
merkle.rs
wai: extract the quantum stack into a standalone wai-quantum crate
2026-09-03 15:29:50 -04:00
pool.rs
wai-quantum: the sparse-Pauli engine on a worker pool, bit-identical at any thread count
2026-10-17 12:01:11 -04:00
qasm.rs
wai-quantum: one OpenQASM reader for the service, the CLI and the browser IDE; receipts signed with the signer's own key
2026-10-20 17:34:16 -04:00
quantum.rs
wai-quantum circuit2: the number range decided on the literal's digits in both readers
2026-10-09 18:50:35 -04:00
quantum_arch.rs
wai-quantum 0.3.29: the architecture around the code, priced, and the 2025 factoring machine re-run
2026-10-04 17:33:48 -04:00
quantum_atom.rs
wai: extract the quantum stack into a standalone wai-quantum crate
2026-09-03 15:29:50 -04:00
quantum_bptn.rs
wai-quantum 0.3.23: belief-propagation tensor networks, a second method for the same circuits
2026-10-01 20:40:14 -04:00
quantum_cal.rs
wai: one registry table, candidate capabilities, public-text checks
2026-09-30 22:38:09 -04:00
quantum_channel.rs
wai-quantum circuit2: the circuit2 pins beside the frozen circuit/1 pins
2026-10-09 11:43:15 -04:00
quantum_chem.rs
wai-quantum 0.3.37: complex neural quantum states, and referees that cannot stop on an excited state
2026-10-06 17:15:52 -04:00
quantum_comm.rs
wai-quantum circuit2: circuits carry their gateset
2026-10-09 10:34:21 -04:00
quantum_compile.rs
wai: extract the quantum stack into a standalone wai-quantum crate
2026-09-03 15:29:50 -04:00
quantum_control.rs
wai: one registry table, candidate capabilities, public-text checks
2026-09-30 22:38:09 -04:00
quantum_cutrank.rs
wai-quantum: the cut-rank table on the GPU, and the engine's cutrank_single method
2026-10-20 17:34:17 -04:00
quantum_cutrank_metal.rs
wai-quantum: the cut-rank table on the GPU, and the engine's cutrank_single method
2026-10-20 17:34:17 -04:00
quantum_dmrg.rs
wai-quantum 0.3.37: complex neural quantum states, and referees that cannot stop on an excited state
2026-10-06 17:15:52 -04:00
quantum_energy.rs
wai: on-chip counters and calibrated instruments are separate energy classes, and every joule-carrying receipt can say which
2026-09-29 01:27:37 -04:00
quantum_fabric.rs
wai-quantum: the Metal member, with a SIMD-group matrix kernel
2026-10-16 04:59:05 -04:00
quantum_fabric_cuda.rs
wai-quantum 0.6.1: the CUDA member's tensor-core kernel
2026-10-16 04:21:11 -04:00
quantum_fabric_dataflow.rs
wai-quantum 0.6.0: the release that breaks, so the next field does not
2026-10-15 09:39:45 -04:00
quantum_fabric_dsp.rs
wai-quantum: the signal processor, and its vector unit as a member
2026-10-14 10:47:59 -04:00
quantum_fabric_fpga.rs
wai-quantum 0.5.0: provenance, sampling members, device programs, OpenCL, a simulated FPGA, f64 on accelerators, and QPU clients
2026-10-14 09:02:11 -04:00
quantum_fabric_hip.rs
wai-quantum 0.6.2: the HIP member's matrix-instruction kernel
2026-10-16 10:07:26 -04:00
quantum_fabric_metal.rs
wai-quantum: the Metal member's tensor-operation kernel; M5 measured
2026-10-16 10:19:30 -04:00
quantum_fabric_npu.rs
wai-quantum 0.5.1: review fixes
2026-10-14 20:28:04 -04:00
quantum_fabric_npu_cores.rs
wai-quantum: npu-cores imports CStr only where it is used (Linux)
2026-10-15 09:22:27 -04:00
quantum_fabric_opencl.rs
wai-quantum: OpenCL keys carry the device's vendor id, not a word of its name
2026-10-15 08:58:32 -04:00
quantum_fabric_sme.rs
wai-quantum 0.5.1: review fixes
2026-10-14 20:28:04 -04:00
quantum_fabric_tensor_engine.rs
wai-quantum: the tensor-engine helper runs on a named device platform too
2026-10-15 10:12:55 -04:00
quantum_fabric_vector.rs
wai-quantum 0.6.0: the release that breaks, so the next field does not
2026-10-15 09:39:45 -04:00
quantum_fabric_webgpu.rs
wai-quantum 0.4.4: the fabric's CUDA member
2026-10-14 01:14:01 -04:00
quantum_frame.rs
wai-quantum 0.3.25: error correction at circuit level, sampled, modelled and decoded exactly
2026-10-04 14:21:56 -04:00
quantum_gbs.rs
wai-quantum 0.3.27: Gaussian boson sampling, exactly
2026-10-04 16:19:25 -04:00
quantum_info.rs
wai-quantum 0.3.17: the channel, and the direction of the arrow
2026-09-07 05:58:33 -04:00
quantum_kernel.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
quantum_ldpc.rs
wai-quantum 0.3.30: qLDPC memory at circuit level, re-derived from the circuit up
2026-10-04 21:30:40 -04:00
quantum_match.rs
wai-quantum 0.3.32: union-find decoding in near-linear time
2026-10-05 07:46:12 -04:00
quantum_mitigate.rs
wai: one registry table, candidate capabilities, public-text checks
2026-09-30 22:38:09 -04:00
quantum_mps.rs
wai-quantum 0.3.23: belief-propagation tensor networks, a second method for the same circuits
2026-10-01 20:40:14 -04:00
quantum_mpsim.rs
wai-quantum: MPS two-site split by the Gram eigenvectors (Householder + QL), no division by singular values
2026-10-17 12:07:42 -04:00
quantum_noise.rs
wai: extract the quantum stack into a standalone wai-quantum crate
2026-09-03 15:29:50 -04:00
quantum_noisy.rs
wai-quantum: the density matrix by superoperators to 16 qubits (DensityMatrix::evolve); the service's density_matrix on it
2026-10-18 10:20:41 -04:00
quantum_nqs.rs
wai-quantum 0.3.40: a sector larger than the network, held to its exact answer
2026-10-08 19:47:12 -04:00
quantum_ops.rs
wai-quantum fabric: certificates bind what they certify; receipts encode without ambiguity
2026-10-09 03:59:54 -04:00
quantum_pauli.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
quantum_phasor.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
quantum_phasor_meter.rs
wai: on-chip counters and calibrated instruments are separate energy classes, and every joule-carrying receipt can say which
2026-09-29 01:27:37 -04:00
quantum_qbom.rs
wai: on-chip counters and calibrated instruments are separate energy classes, and every joule-carrying receipt can say which
2026-09-29 01:27:37 -04:00
quantum_qdata.rs
wai: one registry table, candidate capabilities, public-text checks
2026-09-30 22:38:09 -04:00
quantum_qec.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
quantum_qfhrr.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
quantum_qio.rs
wai-quantum 0.3.31: quantum-inspired optimisation, a re-runnable classical baseline
2026-10-05 05:27:49 -04:00
quantum_qir.rs
wai-quantum circuit2: the crate's consumers follow the circuit's gateset
2026-10-09 11:19:49 -04:00
quantum_qudit.rs
wai-quantum circuit2: circuits carry their gateset
2026-10-09 10:34:21 -04:00
quantum_receipt.rs
wai-quantum engine: one receipt form for every host; an unknown noise channel refused; did_key
2026-10-20 17:34:16 -04:00
quantum_resource.rs
wai-quantum 0.3.24: fault-tolerant resource estimation, reproducible and signed
2026-10-02 00:26:13 -04:00
quantum_resource_receipt.rs
wai-quantum 0.3.24: fault-tolerant resource estimation, reproducible and signed
2026-10-02 00:26:13 -04:00
quantum_source.rs
wai-quantum circuit2: the circuit2 pins beside the frozen circuit/1 pins
2026-10-09 11:43:15 -04:00
quantum_spd.rs
wai-quantum: expectation_capped, a term cap that doubles the threshold and keeps the bound
2026-10-18 10:20:41 -04:00
quantum_spd_receipt.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
quantum_stabilizer.rs
wai: extract the quantum stack into a standalone wai-quantum crate
2026-09-03 15:29:50 -04:00
quantum_sv.rs
wai-quantum: state-vector passes spawn threads only where each has 2^18 amplitudes; the cut-rank annealer recounts only the cuts a move changes
2026-10-19 22:43:14 -04:00
quantum_sv_metal.rs
wai-quantum: sixteen-member groups on the GPU, one output a thread in the tile; four-qubit gates always tiled
2026-10-18 10:20:41 -04:00
quantum_tableau.rs
wai-quantum 0.6.9: cut-rank amplitudes with the circuit's own global phase
2026-10-20 03:31:32 -04:00
quantum_tdvp.rs
wai-quantum 0.3.36: molecules and neural quantum states, held to exact answers
2026-10-05 16:15:50 -04:00
quantum_tn.rs
wai-quantum 0.6.12: cheaper contraction trees, from V-cycles and tree annealing
2026-10-20 17:34:17 -04:00
quantum_toolchain.rs
wai-quantum: one OpenQASM reader for the service, the CLI and the browser IDE; receipts signed with the signer's own key
2026-10-20 17:34:16 -04:00
quantum_uf.rs
wai-quantum 0.3.33: noisy circuits, and where the digital error model is off
2026-10-05 08:08:06 -04:00
quantum_vml.rs
wai-quantum 0.3.22: sparse Pauli dynamics at utility scale, and identical bits on every platform
2026-10-01 15:13:52 -04:00
receipt_pins.rs
wai-quantum circuit2: the circuit2 pins beside the frozen circuit/1 pins
2026-10-09 11:43:15 -04:00
repro.rs
wai-quantum 0.6.4: noisy Clifford circuits by Pauli frames on the wide tableau; the service's stabilizer method takes Pauli noise
2026-10-18 10:20:40 -04:00