`findmin!` and `findmax!` do not work on GPU arrays
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 68/100
Direzione di ricerca
Start with the existing findmin(A; dims) implementation in GPUArrays and AcceleratedKernels' mapreducedim! behavior. Implement the issue's option 1 for findmin! and findmax!, then verify init=false, init=true, nonempty slices, and empty A using the Julia examples and GPU arrays such as JLArray or CUDA.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
GPUArrays implements findmin and findmax, but not their in-place forms, so findmin!(rval, rind, A) falls back to Base's findminmax! loop, which indexes scalars:
using JLArrays # or CUDA, etc.
A = JLArray(Float32[3 1; 2 4])
rval = JLArray(zeros(Float32, 1, 2))
rind = JLArray(fill(CartesianIndex(1, 1), 1, 2))
findmin!(rval, rind, A)
# ERROR: Scalar indexing is disallowed.
# Invocation of getindex resulted in scalar indexing of a GPU array.
(GPUArrays main, and with the AcceleratedKernels-based reductions of #790; Julia 1.13.)
An implementation must reproduce Base's init keyword, whose init=false does not fold the old values in: Base resets the index destination (fill!(rind, zero(eltype(keys(A))))), and "the initial values of Rval are not used if the corresponding indices in Rind are 0", so the old rval is ignored whenever the slice is not empty:
julia> findmin!([-10], [42], [3, 2]; init=false)
([2], [2])
julia> findmin!([0.5 5.0], [CartesianIndex(9, 9) CartesianIndex(9, 9)], [3.0 1; 2 4]; init=false)
([2.0 1.0], CartesianIndex{2}[CartesianIndex(2, 1) CartesianIndex(1, 2)])
With init=true, rval starts from the first slice and rind from zero, which gives the same result; either way the result is the reduction of A alone, and an empty A leaves rval and rind unchanged (Base returns early).
Two ways to implement it:
- Reduce
(f(x), i)pairs into a temporary array of tuples withAK.mapreducedim!in overwrite mode, asfindmin(A; dims)does, then unzip it intorvalandrind(rindthroughkeys(A)). This needs no change in AcceleratedKernels, and costs one extra pass over the (small) output and a temporary of its size. - Let
AK.mapreducedim!write a destination that is a pair of arrays, which saves that pass but adds a new destination contract to AcceleratedKernels.
Option 1 is the natural first step; findmin!/findmax! along dims are rarely performance-critical.
- Lingua principale
- Julia
- Stelle
- 455
- Fork
- 106
- Merge medio
- 4g 4m
- PR unite (30g)
- 19
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/GPUArrays.jl
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
JuliaGPU/GPUArrays.jl#837 ·
I maintainer di solito rispondono entro 2 giorni
-
`@fastmath` reductions are 2–5× slower: no `neutral_element` for `Base.FastMath.max_fast` and co.Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
JuliaGPU/GPUArrays.jl#833 ·
I maintainer di solito rispondono entro 2 giorni
-
arrays
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
JuliaGPU/GPUArrays.jl#697 · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
JuliaGPU/GPUArrays.jl#836 ·
I maintainer di solito rispondono entro 2 giorni
-
`reverse(::JLArray)` errors with GPUArrays 12.1.1 and JLArrays 0.4.2 (JLArrays release missing)Apertainstallation regression
Difficoltà 2/5 1-3 ore Idoneità per principianti 57/100
JuliaGPU/GPUArrays.jl#817 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di JuliaGPU/GPUArrays.jl
Issue simili
-
io
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 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
bmad-sim/BeamTracking.jl#382 ·
I maintainer di solito rispondono entro 1 giorno
-
Typo in the Adjoint sectionAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100