`@localmem` silently breaks things when used with non-const dims

Aperta
#587 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
35/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
julia
Ambito
backend

Direzione di ricerca

Riprodurre l’esempio Julia con MetalBackend e confrontare il kernel @localmem con la versione senza memoria locale, usando sia dimensioni non costanti sia costanti. Tracciare come @localmem gestisce l’espressione della dimensione; il lavoro è completato quando il kernel scrive 1.0 in ogni elemento quando n non è costante.

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

Descrizione

kernels

I'm not sure how to explain this behavior, it's like @localmem cancels the effects of the kernel:

julia> using Metal, KernelAbstractions

julia> backend = Metal.MetalBackend()
MetalBackend()

julia> @kernel function settoone_localmem!(x::AbstractVector)
           i = @index(Global)
           n = length(x)
           y = @localmem Bool (n,)
           x[i] = one(eltype(x))
       end
settoone_localmem! (generic function with 4 methods)

julia> @kernel function settoone_nolocalmem!(x::AbstractVector)
           i = @index(Global)
           x[i] = one(eltype(x))
       end
settoone_nolocalmem! (generic function with 4 methods)

julia> x = KernelAbstractions.zeros(backend, Float32, 3);

julia> settoone_localmem!(backend)(x; ndrange=length(x))  # fails

julia> x
3-element MtlVector{Float32, Metal.PrivateStorage}:
 0.0
 0.0
 0.0

julia> settoone_nolocalmem!(backend)(x; ndrange=length(x))  # works

julia> x
3-element MtlVector{Float32, Metal.PrivateStorage}:
 1.0
 1.0
 1.0
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

  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/KernelAbstractions.jl

Tutte le issue di JuliaGPU/KernelAbstractions.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.