access by UnitRange not implemented/performance issue with .x
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 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 con l’indicizzazione per intervalli di ArrayPartition e l’accesso solution .x mostrato nelle riproduzioni dell’issue, quindi esegui gli esempi forniti di BenchmarkTools per confrontarli con gli array piatti. Il lavoro è concluso quando u0[1:4] funziona senza un DimensionMismatch e il rallentamento riportato dell’accesso a ArrayPartition è stato risolto oppure il suo ambito è chiaramente delimitato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Access linearly works, but accessing via range does not:
u0=ArrayPartition(rand(1,2),rand(1,3))
u0[1:4]
DimensionMismatch("output array is the wrong size; expected (Base.OneTo(4),), got (5,)")
Although it can be avoided by something like u0[:][1:4]
Somewhat related, there seems to be quite a noticeable performance hit when accessing the solution's .x tuple. e.g.
using DifferentialEquations,RecursiveArrayTools
function eqn_flat(du,u,p,t)
du .= 0.3 .* u
end
function eqn(du,u,p,t)
for i in 1:RecursiveArrayTools.npartitions(u)
du.x[i] .= 0.3 .* u.x[i]
end
end
u0 = ArrayPartition([rand(2,2) for i in 1:20]...)
u0f = rand(2,2,20)
tspan=(0.0,30.0)
prob = ODEProblem(eqn,u0,tspan)
prob_f = ODEProblem(eqn_flat,u0f,tspan)
sol = solve(prob,Tsit5());
sol_f = solve(prob_f,Tsit5());
if one then wants to do further processing on the, e.g. first 10 2-by-2 matrices solution,
function process(sol)
f=[sol(tx)[:,:,j] for tx in 0:0.01:30, j in 1:10]
end
function process_x(sol)
f=[sol(tx).x[j] for tx in 0:0.01:30, j in 1:10]
end
function process_x_all(sol)
f=[reshape(sol(tx)[:][1:40],2,2,10) for tx in 0:0.01:30]
end
using BenchmarkTools
@btime process(sol_f);
67.081 ms (1050096 allocations: 39.59 MiB)
(julia default matrices method)
@btime process_x(sol);
254.091 ms (1649858 allocations: 84.89 MiB)
(access via.xtuple)
if we use : and change 2d comprehension to 1d, using process_x_all
@btime process_x_all(sol);
26.270 ms (182996 allocations: 12.20 MiB)
@btime process_x_all(sol_f);
6.594 ms (111015 allocations: 7.16 MiB)
of course, with the flat solution we do not need [:]
function process_x_all_flat(sol)
f=[reshape(sol(tx)[1:40],2,2,10) for tx in 0:0.01:30]
end
@btime process_x_all_flat(sol_f);
6.435 ms (108014 allocations: 5.06 MiB)
either way, looks like there's a 3~4x slowdown when accessing ArrayPartition.
- Lingua principale
- Julia
- Stelle
- 233
- Fork
- 76
- Merge medio
- 5h 33m
- PR unite (30g)
- 11
Guida per i contributori
Apri 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/RecursiveArrayTools.jl
-
Docs: usage of j vs i Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
SciML/RecursiveArrayTools.jl#255 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
SciML/RecursiveArrayTools.jl#662 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
SciML/RecursiveArrayTools.jl#661 ·
-
JET: similar_type(::Any) no-matching-method in RecursiveArrayToolsRaggedArrays (pre-existing QA red) Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
SciML/RecursiveArrayTools.jl#620 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
SciML/RecursiveArrayTools.jl#619 ·
Tutte le issue di SciML/RecursiveArrayTools.jl
Issue simili
-
Docstring for MatlabTable Apertaenhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
interpolate! from a Float32 LatitudeLongitudeGrid fails on Metal: Float64 division in find_λ_range Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
CliMA/Oceananigans.jl#6056 ·
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
JuliaPluto/PlutoPlotly.jl#72 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
epiforecasts/BVDOutbreakSize#811 ·