Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

`@fastmath` reductions are 2–5× slower: no `neutral_element` for `Base.FastMath.max_fast` and co.

Aperta Adatta ai principianti
#833 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
86/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Ambito
performance

Direzione di ricerca

Iniziate da reduce/utilities.jl, dove le riduzioni selezionano il fallback _Lane, e individuate il punto di estensione di GPUArraysCore per neutral_element. Aggiunete test per le riduzioni fast-math interessate e verificate che le riduzioni accelerate corrispondano in prestazioni a quelle non-fast-math, preservando la correttezza.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

AI agent:


@fastmath reduce(max, x; dims, init) reduces with Base.FastMath.max_fast, which has no GPUArraysCore.neutral_element method. AcceleratedKernels then takes its _Lane fallback (Base.promote_op(neutral_element, …) === Union{} in reduce/utilities.jl), even though init is given. That fallback is 2–5× slower than max. With GPUArrays 11 the two run at the same speed. NNlib's softmax uses @fastmath max reductions (FluxML/NNlib.jl#828 works around it).

using CUDA, BFloat16s, GPUArrays
const FLUSH = CUDA.zeros(UInt8, 256 * 2^20)
bench(f; n=20) = (f(); minimum(1e6 * (fill!(FLUSH, 0x00); CUDA.@elapsed f()) for _ in 1:n))  # µs

x = CuArray(BFloat16.(randn(Float32, 1024, 1024, 96)))
bench(() -> reduce(max, x; dims=1, init=-Inf32))
bench(() -> @fastmath reduce(max, x; dims=1, init=-Inf32))

# defining the neutral element closes the gap
GPUArrays.GPUArraysCore.neutral_element(::typeof(Base.FastMath.max_fast), T) = typemin(T)

µs, max / max_fast / max_fast with the method above:

max max_fast max_fast + neutral_element
Float32 1024 × 1024 × 96, dims=1 283 612 281
Float32 768 × 8192, dims=2 24.5 51.2 24.6
BFloat16 1024 × 1024 × 96, dims=1 145 610 145
BFloat16 50304 × 8192, dims=1 690 3468 688

Adding neutral_element methods for max_fast and min_fast (and add_fast/mul_fast, which have none either) to GPUArraysCore would fix it.

GPUArrays 12.1.1, AcceleratedKernels 0.5.8, CUDA.jl main (a9e28c0), Julia 1.13.2, RTX 5090.

Lingua principale
Julia
Stelle
455
Fork
106
Merge medio
2g 18h
PR unite (30g)
20

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di JuliaGPU/GPUArrays.jl

Tutte le issue di JuliaGPU/GPUArrays.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.