WaterLily performance regression on CPU multi-threading backend for Julia 1.12.0
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 30/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- julia
- Ambito
- backend, performance
Direzione di ricerca
Inizia con il comando benchmark.sh di WaterLily-Benchmarks e compare.jl usando Julia 1.11.5 e 1.12.0, prestando attenzione ai risultati di CPUx04. Confronta le allocazioni, il tempo di GC e il tempo di esecuzione nei casi tgv e jelly; il lavoro è completato quando la regressione del multithreading della CPU è spiegata e i benchmark interessati non mostrano più il degrado segnalato in Julia 1.12.0.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Here are some WaterLily benchmarks with Float32 comparing Julia 1.11.5 with 1.12.0. The KA CPU multi-threading backend shows performance regression on Julia 1.12.0, specially on CPUx04 where allocations are increasing significantly.
To run your own benchmarks, please use WaterLily-Benchmarks and
sh benchmark.sh -v "1.11.5 release" -w "master" -t "1 2 4" -b "Array CuArray" -c "tgv jelly" -p "6,7 5,6" -s "100 100" -ft "Float32 Float32"
julia --project compare.jl
(Note that env var $WATERLILY_DIR needs to be set to your local WaterLily directory, or alternatively pass -wd "my/waterlily/dir" into benchmarh.sh).
--
Benchmark environment: tgv sim_step! (max_steps=100)
▶ log2p = 6
┌────────────┬───────────┬────────┬───────────┬─────────────┬────────┬──────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Precision │ Allocations │ GC [%] │ Time [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────┼───────────┼─────────────┼────────┼──────────┼──────────────────┼──────────┤
│ CPUx01 │ master │ 1.11.5 │ Float32 │ 1807 │ 0.00 │ 4.16 │ 158.85 │ 1.00 │
│ CPUx01 │ master │ 1.12.0 │ Float32 │ 1807 │ 0.00 │ 4.28 │ 163.16 │ 0.97 │
│ CPUx02 │ master │ 1.11.5 │ Float32 │ 1687271 │ 0.00 │ 4.82 │ 183.72 │ 0.86 │
│ CPUx02 │ master │ 1.12.0 │ Float32 │ 1651033 │ 0.00 │ 5.55 │ 211.89 │ 0.75 │
│ CPUx04 │ master │ 1.11.5 │ Float32 │ 2334995 │ 0.00 │ 2.86 │ 109.25 │ 1.45 │
│ CPUx04 │ master │ 1.12.0 │ Float32 │ 193455597 │ 9.58 │ 4.47 │ 170.65 │ 0.93 │
│ GPU-NVIDIA │ master │ 1.11.5 │ Float32 │ 3041056 │ 0.00 │ 0.60 │ 22.73 │ 6.99 │
│ GPU-NVIDIA │ master │ 1.12.0 │ Float32 │ 2208405 │ 0.00 │ 0.59 │ 22.35 │ 7.11 │
└────────────┴───────────┴────────┴───────────┴─────────────┴────────┴──────────┴──────────────────┴──────────┘
▶ log2p = 7
┌────────────┬───────────┬────────┬───────────┬─────────────┬────────┬──────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Precision │ Allocations │ GC [%] │ Time [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────┼───────────┼─────────────┼────────┼──────────┼──────────────────┼──────────┤
│ CPUx01 │ master │ 1.11.5 │ Float32 │ 1807 │ 0.00 │ 25.66 │ 122.35 │ 1.00 │
│ CPUx01 │ master │ 1.12.0 │ Float32 │ 1807 │ 0.00 │ 26.23 │ 125.08 │ 0.98 │
│ CPUx02 │ master │ 1.11.5 │ Float32 │ 1571048 │ 0.00 │ 29.16 │ 139.06 │ 0.88 │
│ CPUx02 │ master │ 1.12.0 │ Float32 │ 1537319 │ 0.00 │ 31.40 │ 149.75 │ 0.82 │
│ CPUx04 │ master │ 1.11.5 │ Float32 │ 2175214 │ 0.00 │ 17.07 │ 81.41 │ 1.50 │
│ CPUx04 │ master │ 1.12.0 │ Float32 │ 951576349 │ 9.22 │ 24.21 │ 115.46 │ 1.06 │
│ GPU-NVIDIA │ master │ 1.11.5 │ Float32 │ 2784710 │ 0.00 │ 3.03 │ 14.44 │ 8.47 │
│ GPU-NVIDIA │ master │ 1.12.0 │ Float32 │ 2329316 │ 0.00 │ 3.12 │ 14.87 │ 8.23 │
└────────────┴───────────┴────────┴───────────┴─────────────┴────────┴──────────┴──────────────────┴──────────┘
Benchmark environment: jelly sim_step! (max_steps=100)
▶ log2p = 5
┌────────────┬───────────┬────────┬───────────┬─────────────┬────────┬──────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Precision │ Allocations │ GC [%] │ Time [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────┼───────────┼─────────────┼────────┼──────────┼──────────────────┼──────────┤
│ CPUx01 │ master │ 1.11.5 │ Float32 │ 7107 │ 0.00 │ 3.49 │ 266.22 │ 1.00 │
│ CPUx01 │ master │ 1.12.0 │ Float32 │ 6307 │ 0.00 │ 3.54 │ 269.76 │ 0.99 │
│ CPUx02 │ master │ 1.11.5 │ Float32 │ 3244853 │ 0.00 │ 5.30 │ 404.21 │ 0.66 │
│ CPUx02 │ master │ 1.12.0 │ Float32 │ 3174214 │ 0.00 │ 6.16 │ 470.05 │ 0.57 │
│ CPUx04 │ master │ 1.11.5 │ Float32 │ 4491947 │ 0.67 │ 3.37 │ 257.31 │ 1.03 │
│ CPUx04 │ master │ 1.12.0 │ Float32 │ 299427100 │ 10.59 │ 5.44 │ 414.85 │ 0.64 │
│ GPU-NVIDIA │ master │ 1.11.5 │ Float32 │ 5805841 │ 1.49 │ 0.98 │ 74.80 │ 3.56 │
│ GPU-NVIDIA │ master │ 1.12.0 │ Float32 │ 4179289 │ 0.00 │ 0.89 │ 68.16 │ 3.91 │
└────────────┴───────────┴────────┴───────────┴─────────────┴────────┴──────────┴──────────────────┴──────────┘
▶ log2p = 6
┌────────────┬───────────┬────────┬───────────┬─────────────┬────────┬──────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Precision │ Allocations │ GC [%] │ Time [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────┼───────────┼─────────────┼────────┼──────────┼──────────────────┼──────────┤
│ CPUx01 │ master │ 1.11.5 │ Float32 │ 8307 │ 0.00 │ 25.63 │ 244.38 │ 1.00 │
│ CPUx01 │ master │ 1.12.0 │ Float32 │ 7307 │ 0.00 │ 26.46 │ 252.35 │ 0.97 │
│ CPUx02 │ master │ 1.11.5 │ Float32 │ 4229004 │ 0.00 │ 28.61 │ 272.88 │ 0.90 │
│ CPUx02 │ master │ 1.12.0 │ Float32 │ 4136532 │ 0.00 │ 30.73 │ 293.07 │ 0.83 │
│ CPUx04 │ master │ 1.11.5 │ Float32 │ 5860776 │ 0.17 │ 17.27 │ 164.69 │ 1.48 │
│ CPUx04 │ master │ 1.12.0 │ Float32 │ 1592091668 │ 10.72 │ 26.24 │ 250.23 │ 0.98 │
│ GPU-NVIDIA │ master │ 1.11.5 │ Float32 │ 7780323 │ 0.48 │ 3.26 │ 31.14 │ 7.85 │
│ GPU-NVIDIA │ master │ 1.12.0 │ Float32 │ 6813568 │ 0.51 │ 3.24 │ 30.92 │ 7.90 │
└────────────┴───────────┴────────┴───────────┴─────────────┴────────┴──────────┴──────────────────┴──────────┘
- Lingua principale
- Julia
- Stelle
- 533
- Fork
- 90
- Merge medio
- 1g 6h
- PR unite (30g)
- 56
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 JuliaGPU/KernelAbstractions.jl
-
good first issue runtime
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
JuliaGPU/KernelAbstractions.jl#691 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Enzyme reverse mode: `prod(ndrange)` fails for kernels with a construction-time ndrangeForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
JuliaGPU/KernelAbstractions.jl#924 ·
I maintainer di solito rispondono entro 1 giorno
-
CPU backend: `Base.checked_mul` in a kernel fails to build (`__spirv_SMulExtended` missing in PoCL)Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
JuliaGPU/KernelAbstractions.jl#916 ·
I maintainer di solito rispondono entro 1 giorno
-
kernels pocl upstream
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
JuliaGPU/KernelAbstractions.jl#894 ·
I maintainer di solito rispondono entro 1 giorno
-
CPU backend: locals that live across a `@synchronize()` in a loop make a kernel 14–78× slowerApertakernels performance pocl upstream
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
JuliaGPU/KernelAbstractions.jl#893 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaGPU/KernelAbstractions.jl
Issue simili
-
🕷️ bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
CliMA/ClimaSeaIce.jl#203 ·
I maintainer di solito rispondono entro 3 giorni
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
JuliaPhysics/BeamletOptics.jl#221 ·
I maintainer di solito rispondono entro 1 giorno
-
release preparation spack
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
-
30-minutes algorithm any-language codewars dart easy elixir hackerrank hacktoberfest haskell help wanted interview-prep julia leetcode lua open-source r scala students zig
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Huerte/algo-solutions-python#163 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
QuantumSavory/QuantumClifford.jl#853 ·
I maintainer di solito rispondono entro 1 giorno