Optimización de la división de enteros con 32 bits en procesadores de 64 bits

Fuentes: Optimizing 32-bit signed integer division on 64-bit processors

La división de enteros de 32 bits con signo en procesadores de 64 bits puede optimizarse significativamente mediante el uso de multiplicadores de 33 bits, superando a la estrategia estándar de los compiladores. Mientras que GCC y LLVM generan código que multiplica por un constante de 32 bits y corrige el resultado añadiendo un valor, esta técnica es ineficiente cuando el divisor es una potencia de dos o cuando el compilador no aplica la corrección. Al utilizar un multiplicador de 33 bits que encaja en un registro de 32 bits como valor sin signo, se elimina la necesidad de la instrucción de corrección, reduciendo la latencia en hasta dos ciclos en arquitecturas como Intel Emerald Rapids y Apple M4. El artículo detalla el método matemático para seleccionar el multiplicador óptimo, demostrando que para divisores como 7, el producto máximo encaja en un entero de 64 bits. Además, se presenta una librería actualizada, fastmod 0.2.0, que mejora el rendimiento de la división cuando el divisor no es constante, eliminando ramas de predicción errónea mediante el cálculo de bits de alta precisión. Estas técnicas permiten acelerar las operaciones de división en aplicaciones críticas de rendimiento, ofreciendo mejoras de hasta el 20% en throughput y reducciones de latencia de 10 a 8 ciclos en pruebas empíricas.