GPU numerical accuracy: compensated sums, norm-aware results, optional f64
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- backend, performance
Direzione di ricerca
Start with qubit_probability.wgsl, src/backend.rs around measure_qubit, and src/pauli.rs to trace probability and expectation calculations. Check how shaders are compiled and how the GPU adapter requests features before assessing the optional f64 path. Done means branch renormalisation uses each branch's measured norm, expectation values account for state norm, and f64 remains optional on supported adapters.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What you want to do
The GPU backend works in f32. Three things make its error bigger than it needs to be:
qubit_probability.wgsladds up to about 32 thousand terms per thread one after another in f32
(at 30 qubits), andmeasure_qubit(src/backend.rs:153) renormalises by 1/√p from that sum.
Errors add up over many mid-circuit measurements in one shot.- The outcome-0 branch is scaled by 1/√(1 − p1), which is only right if the state's norm is
exactly 1. Pauli::expectation(src/pauli.rs) assumes ‖ψ‖ = 1 and does not divide by the norm, so norm
drift becomes a bias in the expectation value.
Implementation notes
- Use Kahan (compensated) summation in each thread's loop in
qubit_probability.wgsl. Return both
the probability of 1 and the total norm from the same pass, and renormalise each branch by its
own sum. - Divide expectation values by Σ|a|², which is a cheap extra sum in the same loop.
- f64: request
wgpu::Features::SHADER_F64when the adapter offers it and compile a second
shader. Most consumer GPUs run f64 at 1/16–1/64 of f32 speed, so it should only be opt-in.
What it could look like
No API change for 1–3. Optionally `backend="gpu64"` on adapters that support `SHADER_F64`.
Contributing
- I would like to open a pull request for this (see CONTRIBUTING.md).
- Lingua principale
- Rust
- Stelle
- 1
- Fork
- 0
- Merge medio
- 12m
- PR unite (30g)
- 4
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di kaiwave/qsengine
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
Fold long circuit drawingsApertaenhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
Tutte le issue di kaiwave/qsengine
Issue simili
-
bug order-flow studies ui
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
userFRM/egui-charts#2417 ·
I maintainer di solito rispondono entro 1 giorno
-
In a plain-text message, Font, Font Size, Font Color and Text Highlight Color stay liveForse già presa @ragelfundionctrumnar l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
UCS-Care-Group/mailcraft#862 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
smoltcp-rs/smoltcp#1243 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno