rust-lang / rust-lang/rust

Poor codegen for u64::isqrt()

Abierto
#150,653 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

I-slow T-libs
Lenguaje dominante
Rust
Estrellas
119k
Forks
16.2k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

I tried this code:

fn isqrt(val:u64)->u64{
    val.isqrt()
}

I expected to see this happen: rustc generates reasonable code.

Instead, this happened: rustc generates ~150 too many instructions, which takes a while to run.

Potential fix: Use this implementation instead:

fn isqrt(val:u64)->u64{
    let estimate = (val as f64).sqrt() as u64;
    if val < (1<< 52){//value fits in mantissa, exact precision.
        return estimate; 
    }else{
        // Otherwise, do a newton-raphson iteration for the final bits of precision
        unsafe{assert_unchecked(estimate!=0);};
        return (estimate + val/estimate)/2;
    }
}

On my machine, it ran twice as fast.

Meta

rustc --version --verbose:

rustc 1.92.0 (ded5c06cf 2025-12-08)
binary: rustc
commit-hash: ded5c06cf21d2b93bffd5d884aa6e96934ee4234
commit-date: 2025-12-08
host: x86_64-pc-windows-msvc
release: 1.92.0
LLVM version: 21.1.3

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza compilando el ejemplo proporcionado de u64::isqrt() con la toolchain rustc 1.92.0 indicada y examinando las instrucciones generadas. Sigue la ruta de generación de código de rustc para esta operación y compara su salida y tiempo de ejecución con el enfoque propuesto en el issue; se considera terminado cuando las instrucciones excesivas y la ralentización se hayan resuelto con evidencias de un benchmark específico.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
rust
Área
compilers, performance
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.