En el canal de Matt Godbolt hay unos cuantos vídeos interesantes, pero este dedicado a cómo las CPUs optimizan diversas tareas comunes me pareció especialmente llamativo por lo claro y didáctico. Código incluido.
En cinco ejemplos muestra con código en ensamblador cuáles son esas tareas de la CPU, algunas de las cuales se realizan sin «pedirlo expresamente» y sin que seamos muy conscientes de ellas – por decirlo de algún modo. Los ejemplos son para CPUs Intel pero en general son válidos para otras similares. Estas son esas cinco tareas:
Encontrar patrones acerca de los datos de memoria a los que se accede. Esto permite ganar velocidad adelantando las lecturas de la caché (prefetching) tan pronto como se detecta un patrón repetitivo en la forma en que se accede a los datos.
Convertir de CISC a RISC. Las operaciones complejas –propias de la arquitectura de procesadores CISC– se convierten a operaciones más simples (propias de la arquitectura RISC), una especie de micro operaciones que son más simples, rápidas y eficientes.
Planificar la ejecución de código independiente. Si dos grupos de instrucciones son independientes (y a veces lo son, por ejemplo porque utilizan registros independientes y direcciones diferentes) la CPU puede comenzar a ejecutar el segundo grupo incluso antes de que el primero termine, ganando así tiempo en la ejecución total.
Convertir a formato SSA. En el formato SSA la CPU convierte las instrucciones a una representación que emplea «registros imaginarios» (ojo: todo esto es una analogía) para comprobar si el código independiente de …