Make blocking Level Zero calls GC-safe
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
Direzione di ricerca
Start by comparing the plain @ccall wrappers in lib/level-zero/libze.jl with the @gcsafe_ccall usage in lib/level-zero/synchronization.jl, then find the generator in res/wrap.jl. Check the blocking callers in lib/level-zero/module.jl, fence.jl and event.jl. Done means the blocking Level Zero calls use GC-safe ccalls, the wrappers still load, and the existing test suite passes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The generated Level Zero wrappers in lib/level-zero/libze.jl all use a plain @ccall. While such a call runs, its thread is in a GC-unsafe state, so a garbage collection requested by any other thread waits until the call returns. That only matters for calls that can block for a long time:
zeModuleCreate(called fromZeModule,lib/level-zero/module.jl) runs the IGC compile. On an Iris Xe with a cold NEO cache (NEO_CACHE_PERSISTENT=0) it took 19–248 ms per kernel. That is the first launch of every kernel in a session whose driver cache doesn't have it yet.Base.wait(::ZeFence)andBase.wait(::ZeEvent)(lib/level-zero/fence.jl,event.jl) callzeFenceHostSynchronize/zeEventHostSynchronizewith atypemax(UInt64)timeout, i.e. block for as long as the GPU work takes.
The synchronization in lib/level-zero/synchronization.jl already uses @gcsafe_ccall for the same reason, and CUDA.jl's wrapper generator emits every driver call as @gcsafe_ccall (res/wrap/wrap.jl there), e.g. cuModuleLoadData and cuLinkComplete. Either approach works here: rewrite all calls in res/wrap.jl, or only the blocking ones above. Level Zero documents these functions as thread-safe.
- Lingua principale
- Julia
- Stelle
- 217
- Fork
- 37
- Merge medio
- 1g 7h
- PR unite (30g)
- 38
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/oneAPI.jl
-
libraries upstream
Difficoltà 4/5 1-2 giorni Idoneità per principianti 22/100
JuliaGPU/oneAPI.jl#703 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
IGC heap corruption compiling findmax's reduction kernel on Julia 1.12 with --check-bounds=yesAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
JuliaGPU/oneAPI.jl#663 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaGPU/oneAPI.jl
Issue simili
-
enhancement good first issue help wanted
Difficoltà 2/5 Mezza giornata Idoneità per principianti 82/100
-
Precompilation fails on Julia 1.14 nightly: HessenbergQ lmul! methods overwrite LinearAlgebra'sAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
JuliaLinearAlgebra/GenericLinearAlgebra.jl#183 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
oscar-system/GAP.jl#1455 ·
I maintainer di solito rispondono entro 1 giorno