Unnecessary allocation when not unpacking?
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- julia
- Ambito
- performance
Direzione di ricerca
Inizia riproducendo gli esempi f1! e f2! di BenchmarkTools riportati nell’issue e confronta le loro allocazioni per u.x .= 0.0 con quelle di una x locale. Analizza il comportamento dell’accesso alle proprietà e del broadcasting di ComponentArrays coinvolto; il lavoro è concluso quando si determina se la differenza nelle allocazioni è prevista oppure la si corregge con un benchmark o un test di regressione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
If I don't unpack x = u.x a component vector before updating it, say with u.x .+= 1 instead of x = u.x; x .+= 1 , I get some extra allocations. The strange thing is that both x and u.x seem to be identical.
Is that intended/expected (and if so, mind me ask why?) or is it a bug?
julia> using ComponentArrays
julia> using BenchmarkTools
julia> u = ComponentVector(x = [0.9, 0.1])
ComponentVector{Float64}(x = [0.9, 0.1])
julia> function f1!(u)
u.x .= 0.0
nothing
end
f1! (generic function with 1 method)
julia> function f2!(u)
x = u.x
x .= 0.0
nothing
end
f2! (generic function with 1 method)
julia> @btime f1!($(copy(u)));
259.803 ns (2 allocations: 64 bytes)
julia> @btime f2!($(copy(u)));
6.166 ns (0 allocations: 0 bytes)
julia> x = u.x
2-element view(::Vector{Float64}, 1:2) with eltype Float64:
0.9
0.1
julia> x === u.x
true
Here is the system info:
(ca) pkg> st
Status `~/temp/ca/Project.toml`
[6e4b80f9] BenchmarkTools v1.3.1
[b0b7db55] ComponentArrays v0.12.5
julia> versioninfo()
Julia Version 1.7.2
Commit bf53498635 (2022-02-06 15:21 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin19.5.0)
CPU: Apple M1 Pro
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-12.0.1 (ORCJIT, westmere)
Environment:
JULIA_NUM_THREADS = 8
- Lingua principale
- Julia
- Stelle
- 378
- Fork
- 43
- Merge medio
- 6h 49m
- PR unite (30g)
- 3
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 SciML/ComponentArrays.jl
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
SciML/ComponentArrays.jl#344 ·
-
Looping over nested fieldsAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
SciML/ComponentArrays.jl#338 ·
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
SciML/ComponentArrays.jl#337 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 30/100
SciML/ComponentArrays.jl#328 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
SciML/ComponentArrays.jl#321 · 1 commento ·
Tutte le issue di SciML/ComponentArrays.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
MagneticResonanceImaging/MRIReco.jl#366 ·
I maintainer di solito rispondono entro 3 giorni
-
`AdamW` gives `NaN` for zero-gradient entries of `Float16` parameters (epsilon underflows to 0)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
FluxML/Optimisers.jl#253 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
JuliaGraphs/GraphNeuralNetworks.jl#736 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno