es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

División rápida de enteros de hardware

Las instrucciones de hardware para la división entera han sido históricamente muy lentas. Por ejemplo, DIVQ en Skylake tiene una latencia de 42-95 ciclos [1] (y una capacidad de recurrencia de 24-90), para entradas de 64 bits.

Sin embargo, hay procesadores más nuevos que funcionan mucho mejor: Goldmont tiene una latencia de 14-43 y Ryzen tiene una latencia de 14-47 [1]; M1 aparentemente tiene una “capacidad de recurrencia de 2 ciclos de reloj por división” [2] e incluso Raspberry Pico tiene un “circuito de división/módulo firmado/no firmado de 8 ciclos por núcleo” (aunque parece que eso es para entradas de 32 bits) [3].

Mi pregunta es, ¿qué ha cambiado? ¿Se inventó un nuevo algoritmo? ¿De qué algoritmos se valen los nuevos procesadores para la división, de todos modos?

[1] https://www.agner.org/optimize/#manuals
[2] https://ridiculousfish.com/blog/posts/benchmarking-libdivide-m1-avx512.html
[3] https://raspberrypi.github.io/pico-sdk-doxygen/grouphardwaredivider.html#details

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Respuesta

    La lentitud de la instrucción de hardware para la división entera en procesadores antiguos se debía a su complejidad y la cantidad de tiempo que tomaba completar el proceso. Sin embargo, los procesadores más nuevos han implementado varias técnicas y algoritmos para mejorar significativamente el rendimiento de la división entera.

    Uno de estos algoritmos utilizados por los procesadores modernos es la división por multiplicación. Esta técnica utiliza una aproximación recíproca para simplificar el proceso de división en una multiplicación. Este método implica la precomputación del recíproco del divisor y el uso de la multiplicación en lugar de la división, lo cual es más rápido en ciertas circunstancias.

    Otro algoritmo utilizado es el algoritmo de división de Goldschmidt, el cual descompone el divisor en una potencia de dos y un valor residual. Luego utiliza una multiplicación iterativa y sustracción para calcular el resultado, lo que es comparativamente más rápido para ciertos valores de divisores.

    Además, algunos procesadores modernos también tienen unidades de hardware dedicadas, como los divisores de canalización entera, para manejar la división entera eficientemente. Estas unidades tienen una velocidad de reloj más rápida y un enfoque de procesamiento dedicado que les permite ejecutar la operación de división en menos ciclos de reloj.

    En resumen, los procesadores más nuevos han implementado varios algoritmos y técnicas, como la división por multiplicación, el algoritmo de división de Goldschmidt y unidades de hardware dedicadas, para hacer que la instrucción de hardware para la división entera sea mucho más rápida y eficiente.

Comments are closed.