1 puntos por GN⁺ 2025-12-03 | 1 comentarios | Compartir por WhatsApp
  • Proyecto de calendario de Adviento de 25 días sobre optimización de compiladores en C/C++
  • Del 1 al 25 de diciembre se presenta cada día, mediante publicaciones de blog y videos, un caso de optimización
  • Cada publicación aborda en detalle cuándo se aplica, la interpretación del ensamblador y los casos en que no se aplica
  • Aunque está centrado en x86-64, también incluye algunos contenidos de arquitectura ARM de 64 y 32 bits
  • Una serie con gran valor educativo para desarrolladores que quieren aprender cómo funciona un compilador

Resumen del proyecto Advent of Compiler Optimisations 2025

  • Tras casi un año de preparación, el proyecto publica un nuevo caso de optimización de compilador cada día durante diciembre
    • Del 1 al 25 de diciembre se publica una entrada de blog y un video diarios
    • Cada contenido trata una optimización interesante que realiza el compilador, basada en código C o C++
  • Cada optimización se explica en detalle, incluyendo condiciones de aplicación, interpretación del código ensamblador y los casos en que no se aplica
    • No se limita a comparar código, sino que analiza el funcionamiento real del compilador

Alcance técnico

  • Cubre una amplia gama de temas, desde trucos a nivel de arquitectura de bajo nivel hasta técnicas de optimización de alto nivel
    • Principalmente trata x86-64, pero también incluye parte del contenido relacionado con ARM de 64 y 32 bits
  • Está conformado como material práctico para aprender el funcionamiento interno del compilador y su proceso de generación de código

Cómo participar y ver el contenido

Importancia del proyecto

  • Proyecto personal a gran escala, finalizado tras casi un año de preparación, con el objetivo de explorar la sofisticación y eficiencia de los compiladores
  • Un intento educativo para ayudar a los desarrolladores a comprender el funcionamiento real de la optimización del compilador y poder aprovecharlo al escribir código
  • El autor busca compartir la satisfacción de aprender lo sorprendentes que pueden ser los compiladores

Presentación de Matt Godbolt

  • Desarrollador de C++ que vive en Chicago y trabaja en Hudson River Trading
  • Coanfitrión del podcast Two’s Complement
  • Activo en Mastodon y Bluesky
  • El contenido del blog se distribuye bajo la licencia Creative Commons BY-NC 3.0 Unported

1 comentarios

 
GN⁺ 2025-12-03
Opinión en Hacker News
  • Después de ver las optimizaciones de compilador de Matt, también vale la pena revisar la entrevista que hice con él
    Lo que terminé creyendo es esto: trabaja en el nivel de abstracción con el que te sientas cómodo, pero también entiende la capa de abajo
    Por ejemplo, si eres programador de C, deberías saber cómo interactúa el runtime de C con el sistema operativo. No hace falta conocer todos los detalles, pero sí tener una idea de por dónde empezar a mirar cuando aparece un problema
    El artículo de ACM Queue que escribió Matt también es viejo, pero sigue siendo una introducción excelente para entender este tipo de conceptos de optimización

    • En la universidad, un profesor me decía: “entiende la capa que está justo debajo de aquella en la que trabajas”. Eso me ayudó muchísimo en mi carrera
      Por ejemplo, al trabajar con Java, entender la JVM me permitió optimizar mucho mejor el rendimiento de software médico. Y además, simplemente es divertido entender la capa de abajo
    • Gracias, Adam 😊
  • Aunque claramente es un experto en el dominio, me impresiona que no se lance de inmediato al complejo conjunto de instrucciones de x86, sino que explique todo paso a paso desde lo básico

  • Matt Godbolt es una verdadera joya de las comunidades de C y C++
    Creo que Compiler Explorer y sus aportes han mejorado el mundo de muchísimos desarrolladores

    • ¿¡Qué!? ¿¡Godbolt es una persona real!?
  • Estoy viendo Advent of Computer Science Advent Calendars, Day 2

    • Creo que ya llegamos a ese punto
  • Me interesa mucho la técnica de amalgamación de código que usa SQLite
    Según el equipo de SQLite, solo con eso ya consiguen una mejora de rendimiento de 5 a 10%. Ojalá Matt toque este tema durante la sesión

    • Es un tema bastante común y, en realidad, más que una optimización de compilador, es una forma de compilación conocida como “unity build
      Referencia: wiki de Unity build
    • Hoy en día se usa más LTO (Link Time Optimization) que unity build
      Aun así, como LTO puede ser lento en builds no incrementales, unity build sigue siendo útil en compilaciones puntuales
  • Llevo 25 años desarrollando software, pero todavía me pregunto si estoy usando los flags de compilador óptimos

    • Por mi experiencia, menos flags es mejor
      En la mayoría de los casos, -O2 es suficiente. Cada vez que el compilador se actualiza, sus optimizaciones internas mejoran, así que casi nunca hace falta que el desarrollador ajuste todo manualmente
      Además, agregar flags basados en un benchmark mal hecho es peligroso. Diferencias de rendimiento de 1 a 2% son comunes según el estado del sistema
      Si cambia la estructura del código, también puede cambiar qué tan amigable es con la caché, y eso afectar el rendimiento. O sea, puede que no sea por el flag, sino por cómo quedó distribuido el código
  • Tengo muchas ganas de ver las publicaciones que faltan. Esta mañana estuve enseñándole a SBCL a optimizar los patrones (+ base (* index scale)) y (+ base (ash index n)) en una sola instrucción LEA. Fue aplicar de inmediato lo aprendido en el Day 2

  • Nunca hay demasiado contenido de Godbolt

  • Me gustaría que cubrieran la operación de dividir por constantes enteras. El capítulo correspondiente de Hacker’s Delight es realmente excelente, pero para el lector general puede sentirse un poco difícil

  • Es como un Advent of Code para fanáticos de compiladores
    Me encanta el formato de una pequeña lección diaria de optimización para ir desarrollando intuición
    Entender qué hace el compilador y por qué lo hace te vuelve mejor programador sin importar qué lenguaje uses