WaterLily performance regression on CPU multi-threading backend for Julia 1.13.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
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- julia
- Ambito
- backend, performance
Direzione di ricerca
Inizia riproducendo gli ambienti di benchmark e confronta Julia 1.11.5 con 1.13.0-rc1, concentrandoti sul backend CPUx04 di KernelAbstractions rispetto a CPUx01. Analizza il percorso di multithreading della CPU e la issue 644 correlata di KernelAbstractions.jl. Il lavoro è completato quando la regressione è stata identificata e le prestazioni di CPUx04 sono state ripristinate senza introdurre regressioni negli altri backend.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The following tests show the performance of WaterLily on Julia 1.11.5 vs 1.13.0-rc1 under different backends. There seems to be a significant performance regression on the KA CPU multi-threading backend, CPUx04. The CPUx01 backend uses SIMD instead of KA and is used for reference. A regression was also observed on Julia 1.12.0, https://github.com/JuliaGPU/KernelAbstractions.jl/issues/644.
Benchmark environment: tgv sim_step! (max_steps=25, samples=5)
▶ log2p = 6
┌────────────┬───────────┬────────────┬─────────────┬────────┬─────────┬─────────┬─────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Allocations │ GC [%] │ Min [s] │ Med [s] │ Max [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────────┼─────────────┼────────┼─────────┼─────────┼─────────┼──────────────────┼──────────┤
│ CPUx01 │ v1.6.1 │ 1.11.5 │ 1056 │ 0.00 │ 0.99 │ 1.08 │ 1.18 │ 151.63 │ 1.00 │
│ CPUx01 │ v1.6.1 │ 1.13.0-rc1 │ 1055 │ 0.00 │ 1.04 │ 1.15 │ 1.21 │ 158.71 │ 0.96 │
│ CPUx04 │ v1.6.1 │ 1.11.5 │ 473231 │ 0.00 │ 0.66 │ 0.70 │ 0.71 │ 101.06 │ 1.50 │
│ CPUx04 │ v1.6.1 │ 1.13.0-rc1 │ 473030 │ 0.00 │ 1.00 │ 1.17 │ 1.29 │ 152.73 │ 0.99 │
│ GPU-NVIDIA │ v1.6.1 │ 1.11.5 │ 519531 │ 0.00 │ 0.09 │ 0.10 │ 0.11 │ 14.41 │ 10.52 │
│ GPU-NVIDIA │ v1.6.1 │ 1.13.0-rc1 │ 345454 │ 0.00 │ 0.10 │ 0.10 │ 0.11 │ 15.59 │ 9.73 │
└────────────┴───────────┴────────────┴─────────────┴────────┴─────────┴─────────┴─────────┴──────────────────┴──────────┘
▶ log2p = 7
┌────────────┬───────────┬────────────┬─────────────┬────────┬─────────┬─────────┬─────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Allocations │ GC [%] │ Min [s] │ Med [s] │ Max [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────────┼─────────────┼────────┼─────────┼─────────┼─────────┼──────────────────┼──────────┤
│ CPUx01 │ v1.6.1 │ 1.11.5 │ 1155 │ 0.00 │ 7.03 │ 7.08 │ 7.14 │ 134.01 │ 1.00 │
│ CPUx01 │ v1.6.1 │ 1.13.0-rc1 │ 1155 │ 0.00 │ 7.44 │ 7.47 │ 7.58 │ 141.83 │ 0.94 │
│ CPUx04 │ v1.6.1 │ 1.11.5 │ 508180 │ 0.00 │ 4.25 │ 4.63 │ 5.35 │ 81.14 │ 1.65 │
│ CPUx04 │ v1.6.1 │ 1.13.0-rc1 │ 507980 │ 0.00 │ 6.28 │ 6.76 │ 7.47 │ 119.69 │ 1.12 │
│ GPU-NVIDIA │ v1.6.1 │ 1.11.5 │ 560755 │ 0.00 │ 0.66 │ 0.66 │ 0.67 │ 12.59 │ 10.64 │
│ GPU-NVIDIA │ v1.6.1 │ 1.13.0-rc1 │ 378728 │ 0.00 │ 0.71 │ 0.72 │ 0.72 │ 13.49 │ 9.94 │
└────────────┴───────────┴────────────┴─────────────┴────────┴─────────┴─────────┴─────────┴──────────────────┴──────────┘
Benchmark environment: sphere
▶ log2p = 3
┌────────────┬───────────┬────────────┬─────────────┬────────┬─────────┬─────────┬─────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Allocations │ GC [%] │ Min [s] │ Med [s] │ Max [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────────┼─────────────┼────────┼─────────┼─────────┼─────────┼──────────────────┼──────────┤
│ CPUx01 │ v1.6.1 │ 1.11.5 │ 955 │ 0.00 │ 1.01 │ 1.06 │ 1.18 │ 137.47 │ 1.00 │
│ CPUx01 │ v1.6.1 │ 1.13.0-rc1 │ 955 │ 0.00 │ 1.06 │ 1.08 │ 1.21 │ 143.59 │ 0.96 │
│ CPUx04 │ v1.6.1 │ 1.11.5 │ 437230 │ 0.00 │ 0.60 │ 0.61 │ 0.62 │ 81.01 │ 1.70 │
│ CPUx04 │ v1.6.1 │ 1.13.0-rc1 │ 437030 │ 0.00 │ 1.01 │ 1.11 │ 1.16 │ 137.22 │ 1.00 │
│ GPU-NVIDIA │ v1.6.1 │ 1.11.5 │ 480879 │ 0.00 │ 0.09 │ 0.09 │ 0.09 │ 11.97 │ 11.48 │
│ GPU-NVIDIA │ v1.6.1 │ 1.13.0-rc1 │ 327128 │ 0.00 │ 0.09 │ 0.10 │ 0.11 │ 12.84 │ 10.71 │
└────────────┴───────────┴────────────┴─────────────┴────────┴─────────┴─────────┴─────────┴──────────────────┴──────────┘
▶ log2p = 4
┌────────────┬───────────┬────────────┬─────────────┬────────┬─────────┬─────────┬─────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Allocations │ GC [%] │ Min [s] │ Med [s] │ Max [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────────┼─────────────┼────────┼─────────┼─────────┼─────────┼──────────────────┼──────────┤
│ CPUx01 │ v1.6.1 │ 1.11.5 │ 1055 │ 0.00 │ 9.65 │ 9.80 │ 9.88 │ 163.55 │ 1.00 │
│ CPUx01 │ v1.6.1 │ 1.13.0-rc1 │ 1055 │ 0.00 │ 9.99 │ 10.08 │ 10.18 │ 169.30 │ 0.97 │
│ CPUx04 │ v1.6.1 │ 1.11.5 │ 472180 │ 0.00 │ 4.28 │ 4.38 │ 4.39 │ 72.60 │ 2.25 │
│ CPUx04 │ v1.6.1 │ 1.13.0-rc1 │ 471980 │ 0.00 │ 5.81 │ 7.59 │ 8.79 │ 98.43 │ 1.66 │
│ GPU-NVIDIA │ v1.6.1 │ 1.11.5 │ 522130 │ 0.00 │ 0.70 │ 0.71 │ 0.71 │ 11.89 │ 13.76 │
│ GPU-NVIDIA │ v1.6.1 │ 1.13.0-rc1 │ 365427 │ 0.00 │ 0.76 │ 0.77 │ 0.79 │ 12.90 │ 12.68 │
└────────────┴───────────┴────────────┴─────────────┴────────┴─────────┴─────────┴─────────┴──────────────────┴──────────┘
Benchmark environment: jelly
▶ log2p = 5
┌────────────┬───────────┬────────────┬─────────────┬────────┬─────────┬─────────┬─────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Allocations │ GC [%] │ Min [s] │ Med [s] │ Max [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────────┼─────────────┼────────┼─────────┼─────────┼─────────┼──────────────────┼──────────┤
│ CPUx01 │ v1.6.1 │ 1.11.5 │ 1390 │ 0.00 │ 0.87 │ 0.89 │ 0.92 │ 264.49 │ 1.00 │
│ CPUx01 │ v1.6.1 │ 1.13.0-rc1 │ 1390 │ 0.00 │ 0.92 │ 0.93 │ 0.97 │ 279.29 │ 0.95 │
│ CPUx04 │ v1.6.1 │ 1.11.5 │ 1296258 │ 0.00 │ 0.70 │ 0.73 │ 0.74 │ 214.50 │ 1.23 │
│ CPUx04 │ v1.6.1 │ 1.13.0-rc1 │ 1296258 │ 0.00 │ 1.04 │ 1.23 │ 1.66 │ 316.02 │ 0.84 │
│ GPU-NVIDIA │ v1.6.1 │ 1.11.5 │ 795072 │ 0.00 │ 0.11 │ 0.11 │ 0.13 │ 32.80 │ 8.06 │
│ GPU-NVIDIA │ v1.6.1 │ 1.13.0-rc1 │ 531130 │ 0.00 │ 0.12 │ 0.14 │ 0.15 │ 35.45 │ 7.46 │
└────────────┴───────────┴────────────┴─────────────┴────────┴─────────┴─────────┴─────────┴──────────────────┴──────────┘
▶ log2p = 6
┌────────────┬───────────┬────────────┬─────────────┬────────┬─────────┬─────────┬─────────┬──────────────────┬──────────┐
│ Backend │ WaterLily │ Julia │ Allocations │ GC [%] │ Min [s] │ Med [s] │ Max [s] │ Cost [ns/DOF/dt] │ Speed-up │
├────────────┼───────────┼────────────┼─────────────┼────────┼─────────┼─────────┼─────────┼──────────────────┼──────────┤
│ CPUx01 │ v1.6.1 │ 1.11.5 │ 1852 │ 0.00 │ 6.42 │ 6.68 │ 6.79 │ 245.02 │ 1.00 │
│ CPUx01 │ v1.6.1 │ 1.13.0-rc1 │ 1852 │ 0.00 │ 6.68 │ 6.88 │ 7.13 │ 254.88 │ 0.96 │
│ CPUx04 │ v1.6.1 │ 1.11.5 │ 3027277 │ 0.00 │ 4.02 │ 4.28 │ 4.63 │ 153.52 │ 1.60 │
│ CPUx04 │ v1.6.1 │ 1.13.0-rc1 │ 3027277 │ 0.00 │ 5.96 │ 6.36 │ 6.88 │ 227.45 │ 1.08 │
│ GPU-NVIDIA │ v1.6.1 │ 1.11.5 │ 1011053 │ 0.00 │ 0.47 │ 0.50 │ 0.51 │ 18.08 │ 13.55 │
│ GPU-NVIDIA │ v1.6.1 │ 1.13.0-rc1 │ 675930 │ 0.00 │ 0.53 │ 0.54 │ 0.55 │ 20.26 │ 12.09 │
└────────────┴───────────┴────────────┴─────────────┴────────┴─────────┴─────────┴─────────┴──────────────────┴──────────┘
- Lingua principale
- Julia
- Stelle
- 533
- Fork
- 90
- Merge medio
- 1g 11h
- PR unite (30g)
- 66
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
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
JuliaGPU/KernelAbstractions.jl#921 ·
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
Tutte le issue di JuliaGPU/KernelAbstractions.jl
Issue simili
-
`AMSGrad` state starts at `epsilon` instead of zero, so zero gradients move parameters and small gradients are dampedForse già presa @parth-patel010 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
FluxML/Optimisers.jl#247 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
OpenFUSIONToolkit/GPEC#644 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
SciML/DataDrivenDiffEq.jl#694 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
JuliaLang/LinearAlgebra.jl#1834 ·
I maintainer di solito rispondono entro 1 giorno