Negative-stride views crash kernels

Aperta
#321 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 3 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
52/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
julia
Ambito
compilers, hpc

Direzione di ricerca

Start with TileArray(arr) conversion and src/compiler/analysis/assume.jl, especially the op_predicates chain applying nonneg_range() to strides. Trace how a reversed view reaches codegen and compare the stated rejection and ArraySpec approaches. Done means negative-stride views no longer cause an illegal GPU memory access and instead are safely rejected or handled without an invalid non-negative-stride assumption.

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

Descrizione

A view with a negative stride converts to a TileArray without complaint, but kernels using it read out of bounds:

using CUDA, cuTile; import cuTile as ct
function copy_tiles(dst, src)
    i = ct.bid(1)
    ct.store(dst, i, ct.load(src, i, (256,)))
    return
end
n = 4096
x = CuArray(Float32.(1:n)); y = CUDA.zeros(Float32, n)
@cuda backend=cuTile blocks=n÷256 copy_tiles(y, view(x, n:-1:1))
# CUDA error: an illegal memory access was encountered (code 700, ERROR_ILLEGAL_ADDRESS)

TileArray(arr) takes strides(arr) as is, so the reversed view becomes a TileArray with stride -1. Codegen asserts every size and stride is non-negative (op_predicates in src/compiler/analysis/assume.jl chains nonneg_range() for :stride), so tileiras may rely on an assumption that doesn't hold. cuTile Python makes the same assumption (stride_lower_bound_incl=0 for every JIT array argument), but PyTorch doesn't produce negative strides; view(x, n:-1:1) or reverse views do.

Options: reject negative strides when converting (an ArgumentError rather than a GPU fault), or record in the ArraySpec that strides may be negative and drop the assumption for such arrays, as Python's ArrayConstraint.stride_lower_bound_incl allows.

Reproduced on main (5c8e90b5), RTX 5080, Julia 1.13.

Lingua principale
Julia
Stelle
90
Fork
13
Merge medio
4g 8h
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

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

Tutte le issue di JuliaGPU/cuTile.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.