Estoy buscando una tabla o algo similar que pueda ayudarme a calcular la eficiencia del código de ensamblaje.
Como sé, el cambio de bits requiere 1 reloj de CPU, pero realmente estoy mirando cuánto toma la suma (la resta debería tomar lo mismo), la multiplicación y cómo supuestamente calcular el tiempo de división si conozco valores que están dividiendo.
Realmente necesito información sobre valores enteros, pero los tiempos de ejecución flotantes también son bienvenidos.
Respuestas:
En general, cada una de estas operaciones también requiere un ciclo de reloj único para ejecutarse si los argumentos están en registros en las distintas etapas de la tubería.
¿Qué quieres decir con latencia? ¿Cuántos ciclos pasa una operación en la ALU?
Puede encontrar útil esta tabla: http://www.agner.org/optimize/instruction_tables.pdf
Dado que los procesadores modernos son súper escalares y pueden ejecutarse fuera de orden, a menudo puede obtener instrucciones totales por ciclo que exceden 1. Los argumentos para el comando macro son los más importantes, pero la operación también es importante ya que las divisiones tardan más que XOR (<1 latencia de ciclo).
Muchas instrucciones x86 pueden tomar varios ciclos para completar algunas etapas si son complejas (comandos REP o peor, MWAIT, por ejemplo).
fuente
div
yidiv
) es aún peor: está microcodificada y tiene una latencia mucho mayor queadd
oshr
, y ni siquiera está totalmente canalizada en ninguna CPU. Todo esto proviene directamente de las tablas de instrucciones de Agner Fog, por lo que es bueno que hayas vinculado eso.Calcular la eficiencia del código de ensamblaje no es la mejor manera de avanzar en estos días de tuberías Super Scalar de ejecución fuera de orden. Varía según el tipo de procesador. Varía según las instrucciones tanto antes como después (¡puede agregar código adicional y hacer que se ejecute más rápido a veces!). Algunas operaciones (especialmente la división) pueden tener un rango de tiempos de ejecución incluso en chips más antiguos y más predecibles. En realidad, la sincronización de muchas iteraciones es el único camino a seguir.
fuente
Puede encontrar información sobre Intel CPU en los manuales de desarrollador de software de Intel . Por ejemplo, la latencia es 1 ciclo para una suma entera y 3 ciclos para una multiplicación entera.
No sé acerca de la multiplicación, pero espero que la suma siempre tome un ciclo.
fuente