Improve performance of String names
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Refactorización
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- julia
- Área
- performance
Línea de trabajo
Comienza con src/Utilities/model.jl, en las definiciones de almacenamiento de String enlazadas en el issue, y luego examina cómo la obtención y asignación de nombres exponen la representación interna. Compara InlineStrings.jl y WeakRefStrings.jl con el requisito de evitar objetos rastreados por el GC de larga duración, manteniendo a la vez la compatibilidad con String. Se considera terminado cuando se haya mejorado el rendimiento de los nombres en modelos grandes sin cambiar el comportamiento público de los nombres, seguido de una investigación de los wrappers de solver afectados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
A common source of performance problems in JuMP and MathOptInterface are dealing with the String names of variables and constraints.
As a recent example, see https://github.com/jump-dev/MathOptInterface.jl/pull/2426 and related issues/PRs.
The main place that Strings are stored is:
When building models with large (>10^5) numbers of variables and constraints, these dictionaries contain a large number of strings. Each String is a GC-tracked object, and it is long-lived, because we maintain these dictionaries throughout the lifetime of a Model. If CachingOptimizer is involved, there can also be multiple copies of the strings, for example, if we have a setup like Cache(Model, Bridge(Cache(Model, Solver))).
Lots of long-lived GC-tracked objects are bad for Julia's garbage collector.
Workaround
The main workaround at present is JuMP.set_string_names_on_creation(model, false), which does not pass string names from JuMP to the solver.
The downside of this workaround is that solvers and file writers cannot print or display useful names to the user.
Potential approaches
We should try replacing the String storage with an alternative string type. Candidates are:
To ensure backwards compatibility, we should make sure that getting and setting these strings uses the original String type, so that the internal storage is hidden from the user.
It is okay to convert between string types, and to generate extra allocations if these new strings are short-lived objects. The real performance problem is long-lived GC-tracked objects.
Solvers
Many solver packages also store String names. If the changes to MOI are an improvement, we should investigate was to simplify name handling in the different solver wrappers.
- Lenguaje dominante
- Julia
- Estrellas
- 506
- Forks
- 103
- Merge medio
- 1 d 10 min
- PR fusionados (30 d)
- 12
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 jump-dev/MathOptInterface.jl
-
[Bridges] MultirowChange in set_map.jl drops zero coefficientsPosiblemente ocupada @odow la tomó hace 5 días. Abierto
jump-dev/MathOptInterface.jl#3106 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Precision loss in Hessian computationPosiblemente ocupada @blegat la tomó hace 6 días. Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
jump-dev/MathOptInterface.jl#3104 · 11 comentarios ·
Los mantenedores suelen responder en 1 día
-
Layer instantiatorAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
jump-dev/MathOptInterface.jl#2986 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Differentiable Optimization APIAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
jump-dev/MathOptInterface.jl#2969 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Add Batched{S} setAbiertoType: Set Request
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
jump-dev/MathOptInterface.jl#2904 · 15 comentarios · 7 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de jump-dev/MathOptInterface.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
EnzymeAD/Reactant.jl#3549 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
bug help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
JuliaGeometry/Meshes.jl#1469 ·
Los mantenedores suelen responder en 1 día
-
distributed 🕸️
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
CliMA/Oceananigans.jl#6295 · 1 comentario ·
Los mantenedores suelen responder en 1 día