cuSOLVER potrf is not CUDA-graph capturable on CUDA.jl 6.5: no graph replay with vendor dense fronts (T34 step 6, PLAN §2.5)

Abierto
#174 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
38/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
julia

Línea de trabajo

Start with ext/SparseDirectSolverCUDAExt.jl and the reproducer in the issue, then check bench/fact_split.jl to see how graph capture handles vendor dense fronts. First test whether cuSOLVER's 64-bit cusolverDnXpotrf API with user workspace is capture-safe. Done when graph replay works for vendor fronts, or the limitation and required in-kernel wide-front setting are documented in bench/ARCH-TUNING.md and bench/fact_split.jl.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

found-by-agent performance upstream

Found while working on: the chores PR #173 (#164, bench/fact_split.jl), not a task

What: cuSOLVER potrf cannot be captured into a CUDA graph on CUDA.jl 6.5.0 (CUDA runtime 13.4, H200). SDS.vendor_potrf_info! (ext/SparseDirectSolverCUDAExt.jl, device-side info, no host read: the library's regime-C / wide-front path) raises CUSOLVER_STATUS_INTERNAL_ERROR inside CUDA.capture(); cuSOLVER.potrf! raises CaptureError: cannot copy to host memory while capturing a graph. The same calls factor correctly outside capture (info = 0, relative error 2.5e-16 on a 256×256 SPD matrix). Consequence: a refactorization that includes a vendor dense front — the stock DirectSolver regime C with impl = :vendor/:auto, and the fused Cholesky with wides = :host (the default_tuning on sm_70/80/90) — is not graph-capturable; bench/fact_split.jl's graph replay now prints graph capture failed: CUSOLVERError ... CUSOLVER_STATUS_INTERNAL_ERROR on every run (PR #107 had recorded that replay as bit-identical and timing-neutral, on CUDA.jl 5.x). LDLᵀ is unaffected since #170 factors its wide fronts in-kernel on every part.

Reproducer (one process, julia --project=bench):

using CUDA, LinearAlgebra, SparseDirectSolver; const SDS = SparseDirectSolver
n = 256; A0 = (M = randn(n, n); M * M' + n * I); A = CuArray(A0); info = CUDA.zeros(Cint, 2)
SDS.vendor_potrf_info!('L', A, info, 1); CUDA.synchronize()      # fine
copyto!(A, A0); g = CUDA.capture() do; SDS.vendor_potrf_info!('L', A, info, 1); end   # CUSOLVER_STATUS_INTERNAL_ERROR

Why it is out of scope: a property of cuSOLVER under CUDA.jl 6.5 / CUDA 13, found through a bench script; no task owns it. It constrains T34 step 6 and PLAN §2.5 (CUDA-graph replay of refactorize + inverse for n ≲ 1e5): replay is only possible with in-kernel wide fronts (wides = :merged, or the :ka dense fallbacks of T32) or by excluding the vendor calls from the captured range. It does not block T25.

Suggested fix or plan change: before T34 step 6, test whether the cuSOLVER 64-bit API (cusolverDnXpotrf with a user workspace) is capture-safe; if not, make graph replay require in-kernel wides (and document it in bench/ARCH-TUNING.md), and note in bench/fact_split.jl that the graph column needs regime_c_rows large enough that no front takes the vendor path.

Lenguaje dominante
Julia
Estrellas
4
Forks
0
Merge medio
7 h 54 min
PR fusionados (30 d)
84

Preparar el entorno

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de exanauts/SparseDirectSolver.jl

Todos los issues de exanauts/SparseDirectSolver.jl

Issues similares

Más issues de Julia

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.