[FR] Convert indices to more efficient versions
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
- 45/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- ocaml
- Área
- compilers
Línea de trabajo
Comienza con las especializaciones de indexación en src/stan/model/indexing/rvalue.hpp y sigue cómo stanc3 genera index_min_max para los ejemplos 1:N y 8:N. Verifica que el C++ generado use index_max, index_min o index_omni cuando los límites demuestren que esas formas son equivalentes, y confirma que las asignaciones resultantes preservan el comportamiento.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
There's a few optimizations possible around indexing with an index_min_max we can utilize more. Because an index_min_max() has no guaranteed order (it can be a index_min_max(1, 5) or index_min_max(5, 1). we have to make a hard copy when taking a subset using them. But with index_min, index_max, and index_omni we have specializations that don't have to copy when taking subsets.
If a user writes
x[1:5] = y;
This get's generated as something like
assign(x, index_list(index_min_max(1, 5)), y)
but we know that's actually an index_max since the minimum index range in stan is 1. So if we see a 1:N we can transform the generated code to
assign(x, index_list(index_max(5)), y)
converting to index_min is a little more complicated. If a user writes
vector[N] x;
x[8:N] = y
This get's generated as something like
assign(x, index_list(index_min_max(8, N)), y)
but we know that N is the size of x so we could write
assign(x, index_list(index_min(8)), y)
Then finally it's possible to make 1:N min_max into an index_omni, which is effectivly a no-op
vector[N] x;
x[1:N] = y
This get's generated as something like
assign(x, index_list(index_min_max(1, N)), y)
but we know that N is the size of X and 1 is the smallest range value possible in stan so we could write
assign(x, index_list(index_omni()), y)
- Lenguaje dominante
- OCaml
- Estrellas
- 162
- Forks
- 60
- Merge medio
- 2 d 22 h
- PR fusionados (30 d)
- 14
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin 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 stan-dev/stanc3
-
optimization performance robustness
Dificultad 5/5 Más de una semana Aptitud para principiantes 8/100
stan-dev/stanc3#1761 · 6 comentarios ·
Los mantenedores suelen responder en 1 día
-
feature
Dificultad 4/5 1-2 días Aptitud para principiantes 52/100
stan-dev/stanc3#1757 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
cleanup help wanted
Dificultad 5/5 Más de una semana Aptitud para principiantes 22/100
Los mantenedores suelen responder en 1 día
-
cpp-codegen feature performance
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
stan-dev/stanc3#1722 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
feature optimization
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
Los mantenedores suelen responder en 1 día
Todos los issues de stan-dev/stanc3
Issues similares
-
mlir
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
llvm/llvm-project#241070 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
from-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
bug scope:codegen
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
bug sev-3
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
better error message error not reported I/O ICE low priority semantics
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día