GPUVern7 Float32 dense output is ~60 ulps off at mid-step for a constant RHS (visible at tstops)
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 62/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- julia
- Área
- backend, testing-qa
Línea de trabajo
Start by running the provided CPU reproducer and inspect the GPUVern7 interpolant and integ(t) path. Compare the current interpolant with the pre-97e5ac9 source and the tstop tests from PR #544. Done means exact endpoint behavior is preserved, mid-step Float32 error is reduced, and the tstop tests assert an appropriate tolerance.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
In Float32, GPUVern7's dense output loses about 60 ulps at mid-step even for a constant right-hand side, where the interpolant should be exact up to rounding. It shows up whenever an adaptive solve stops at a tstop inside a step, because the state there comes from integ(t).
Reproducer (CPU backend, no GPU needed):
using DiffEqGPU, SciMLBase, StaticArrays, KernelAbstractions
for alg in (GPUTsit5(), GPUVern7(), GPUVern9()), stops in (nothing, Float32[0.875])
prob = ODEProblem{false}((u, p, t) -> SVector(1f0, 1f0), SVector(1f0, 1f0), (0.75f0, 1f0))
kw = stops === nothing ? (;) : (; tstops = stops)
sol = solve(EnsembleProblem(prob), alg, EnsembleGPUKernel(CPU(), 0.0); trajectories = 2,
adaptive = true, dt = prevfloat(0.25f0), abstol = 1f-9, reltol = 1f-6,
save_everystep = false, kw...)
u = sol.u[1].u[end][1]
println(nameof(typeof(alg)), " tstops=", stops, " u_end=", u, " ulps=", round(Int, (u - 1.25f0) / eps(1.25f0)))
end
On master b3d6a17 (Julia 1.12.7), the exact answer is 1.25:
| algorithm | no tstop | tstop at 0.875 |
|---|---|---|
| GPUTsit5 | 1.25 (0 ulps) | 1.25 (0 ulps) |
| GPUVern7 | 1.25 (0 ulps) | 1.2500077 (65 ulps) |
| GPUVern9 | 1.25 (0 ulps) | 1.2499995 (−4 ulps) |
The review of https://github.com/SciML/DiffEqGPU.jl/pull/544 reports that substituting the Vern7 interpolant from before https://github.com/SciML/DiffEqGPU.jl/commit/97e5ac9bd03ce7f075432ac9c784031ccc917aa2 ("Restructure Vern7 interpolant with (1-Θ) factors for exact endpoints") into the same environment brought this case from 65 ulps down to 2. That was a source substitution, not a bisect, and I have not reproduced it independently. That commit made the endpoints exact (see https://github.com/SciML/DiffEqGPU.jl/issues/412), so a fix needs to keep exact endpoints while restoring mid-step accuracy.
Found while working on https://github.com/SciML/DiffEqGPU.jl/pull/544. That PR's tstop tests only check that the callback fired and that the state is finite for Vern7/Vern9, rather than fitting a tolerance to this error. They should be tightened once this is fixed.
🤖 Generated with Claude Code (model: claude-opus-5-5[1m])
- Lenguaje dominante
- Julia
- Estrellas
- 331
- Forks
- 43
- Merge medio
- 1 d 20 h
- PR fusionados (30 d)
- 10
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de SciML/DiffEqGPU.jl
-
Adaptive kernel steppers: t += dt rounding decouples time from integrated length at large tPosiblemente ocupada @ChrisRackauckas-Claude la tomó hace 42 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
SciML/DiffEqGPU.jl#567 ·
Los mantenedores suelen responder en 2 días
-
Adaptive kernel: ContinuousCallback just before a tstop suppresses the tstop's DiscreteCallbackAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
SciML/DiffEqGPU.jl#558 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
SciML/DiffEqGPU.jl#546 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
SciML/DiffEqGPU.jl#540 ·
Los mantenedores suelen responder en 2 días
-
Adaptive GPUTsit5 accepts an initial step past tf and reports an incorrect final statePosiblemente ocupada @Saswatsusmoy la tomó hace 61 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
SciML/DiffEqGPU.jl#535 ·
Los mantenedores suelen responder en 2 días
Todos los issues de SciML/DiffEqGPU.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
why not title! ?Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
MagneticResonanceImaging/MRIReco.jl#366 ·
Los mantenedores suelen responder en 3 días
-
`AdamW` gives `NaN` for zero-gradient entries of `Float16` parameters (epsilon underflows to 0)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
FluxML/Optimisers.jl#253 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
JuliaGraphs/GraphNeuralNetworks.jl#736 ·
Los mantenedores suelen responder en 2 días