lu_instance/qr_instance run a full factorization for FixedSizeArrays
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 72/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- julia
- Área
- performance
Línea de trabajo
Lee los existentes ext/StaticArraysCoreExt.jl y ext/FillArraysExt.jl (o sus equivalentes en ext/) como plantilla y luego añade un FixedSizeArraysExt que defina métodos baratos de lu_instance / qr_instance (y *_instance relacionados) para FixedSizeMatrix. Confirma que el tipo de cada instance coincide con lo que lu(a; check=false) / qr(a) devuelven realmente para un FixedSizeMatrix — p. ej. el pivot es una FixedSizeVector — ejecutando esas llamadas en la REPL. Hecho significa que ArrayInterface.lu_instance(F) está en escala de nanosegundos y que el benchmark del issue ya no muestra una brecha de 50×; consulta test/ para ver dónde se ejercitan los métodos de la extensión.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
lu_instance and qr_instance only have cheap methods for Matrix. A FixedSizeMatrix from FixedSizeArrays.jl falls back to lu(a, check = false) / qr(a) and runs a full factorization. LinearSolve's init calls these, so building a cache costs about 50× more than for a Matrix of the same size:
using ArrayInterface, FixedSizeArrays, LinearSolve, Chairmarks
A = randn(64, 64); F = FixedSizeMatrix(A)
@b ArrayInterface.lu_instance(A) # 24 ns
@b ArrayInterface.lu_instance(F) # 19 μs
@b LinearSolve.init(LinearProblem(similar(A), similar(A))) # 3.1 μs
@b LinearSolve.init(LinearProblem(similar(F), similar(F))) # 168 μs
Suggested fix: add an FixedSizeArraysExt (like the existing StaticArraysCore and FillArrays extensions) with cheap *_instance methods for FixedSizeMatrix. The instances have to match the types the real factorizations return; for example, lu on a FixedSizeMatrix returns a FixedSizeVector pivot vector.
ArrayInterface 7.30.2, FixedSizeArrays 1.3.0, LinearSolve 5.18.2, Julia 1.13.1. Found via ExponentialUtilities.jl, where the default exponential! is about 4× slower on small FixedSizeMatrix inputs than on Matrix.
- Lenguaje dominante
- Julia
- Estrellas
- 140
- Forks
- 45
- Merge medio
- 1 min
- PR fusionados (30 d)
- 1
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 JuliaArrays/ArrayInterface.jl
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JuliaArrays/ArrayInterface.jl#499 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JuliaArrays/ArrayInterface.jl#463 · 5 comentarios · 4 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
JuliaArrays/ArrayInterface.jl#460 · 8 comentarios · 2 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
JuliaArrays/ArrayInterface.jl#397 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 15/100
JuliaArrays/ArrayInterface.jl#396 ·
Todos los issues de JuliaArrays/ArrayInterface.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
oxfordcontrol/COSMO.jl#211 ·
-
documentation
Dificultad 2/5 Medio día Aptitud para principiantes 65/100
Los mantenedores suelen responder en 6 días
-
ARKODE: callbacks that modify `u` throw MethodError on reinitPosiblemente ocupada @devmotion la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
SciML/Sundials.jl#575 ·
-
broken links in docsAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Tube(N) builds N TubeBase segments of length L/(N−1): total friction/inertia length is N·L/(N−1)Posiblemente ocupada @ChrisRackauckas-Claude la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
SciML/ModelingToolkitStandardLibrary.jl#525 ·
Los mantenedores suelen responder en 1 día