Consider further speeding up division by `const`-generic specialization.
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
- rust
- Área
- performance
Línea de trabajo
Comienza por la implementación de división de precisión arbitraria ieee::sig::div e inspecciona si el benchmark existente de "from decimal" cubre los casos relevantes. Añade benchmarks antes de cambiar la implementación y, después, evalúa especializaciones const-generic para divisores de uso común. Se considera terminado cuando se preserve el comportamiento de la división y los benchmarks demuestren una aceleración significativa.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
The main implementation of the ieee::sig::div "arbitrary-precision division" function could be made into a separate function with a const SPECIALIZE_FOR_KNOWN_DIVISOR: u128 const-generic parameter, which it would use as such:
// The parameter being `0` is like `None` - could use `Option<NonZeroU128>` in the future.
if SPECIALIZE_FOR_KNOWN_DIVISOR != 0 {
assert_eq!(divisor[0], SPECIALIZE_FOR_KNOWN_DIVISOR);
assert!(is_all_zeros(&divisor[1..]));
}
(Hopefully this is enough for the rest of the body to be specialized by LLVM, but it can be further forced if necessary)
Then ieee::sig::div would become a "dispatch" fn, which invokes N+1 different instantiations of the const-generic implementation, for N "commonly used divisors" (10 comes to mind, tho there may be a whole sequence of powers of 5 for the conversion from decimal strings IIRC), and one 0 instantiation (which isn't specialized at all), and because the code still does the same division, we're only relying on the optimizer to actually turn the divisions into multiplications.
Whatever we do to the division algorithm, we shouldn't forget to add benchmarks first (unless the "from decimal" benchmark would cover enough interesting cases).
- Lenguaje dominante
- Rust
- Estrellas
- 23
- Forks
- 18
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 2
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 rust-lang/rustc_apfloat
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
rust-lang/rustc_apfloat#44 · 3 comentarios ·
-
Overflow flag when result is larget finite valuePosiblemente ocupada @Garfield1002 la tomó hace 49 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
rust-lang/rustc_apfloat#36 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
rust-lang/rustc_apfloat#46 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
rust-lang/rustc_apfloat#20 ·
-
Support squareRootAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
rust-lang/rustc_apfloat#14 · 1 comentario ·
Todos los issues de rust-lang/rustc_apfloat
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 8 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
swc-project/swc#12576 ·
Los mantenedores suelen responder en 1 día
-
good first issue gpu serve
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día