1 pontos por GN⁺ 2025-12-03 | 1 comentários | Compartilhar no WhatsApp
  • Projeto de calendário de advento de 25 dias com o tema otimizações de compilador C/C++
  • De 1º a 25 de dezembro, é apresentado um caso de otimização por dia através de postagens de blog e vídeos
  • Cada postagem aborda com detalhes quando aplicar, interpretação de assembly e cenários em que não é aplicada
  • Foco principal em x86-64, mas inclui também partes de arquitetura ARM de 64 e 32 bits
  • Uma série de alto valor educacional para quem quer aprender os princípios de funcionamento de compiladores

Visão geral do projeto Advent of Compiler Optimisations 2025

  • Projeto preparado ao longo de cerca de 1 ano, com a publicação de um novo caso de otimização de compilador por dia durante dezembro
    • Publica um post e um vídeo por dia, de 1º a 25 de dezembro
    • Cada conteúdo aborda otimizações interessantes realizadas pelo compilador com base em código C ou C++
  • Cada otimização explica em detalhes condições de aplicação, interpretação de código assembly e casos em que não é aplicada
    • Em vez de uma simples comparação de código, apresenta uma análise do funcionamento real do compilador

Escopo técnico abordado

  • Abrange de truques de arquitetura de baixo nível a técnicas de otimização de alto nível
    • Foca principalmente em x86-64, mas também inclui alguns conteúdos relacionados a ARM de 64 e 32 bits
  • Composto por material prático para aprender o funcionamento interno do compilador e o processo de geração de código

Como participar e assistir

Significado do projeto

  • Projeto pessoal de grande porte, concluído após quase 1 ano de preparação, com o objetivo de explorar a sofisticação e eficiência dos compiladores
  • Uma tentativa educacional para ajudar desenvolvedores a compreender o verdadeiro funcionamento da otimização de compiladores e aplicar esse conhecimento na escrita de código
  • O autor pretende compartilhar também o prazer de aprender o quão incrível é um compilador

Sobre Matt Godbolt

  • Desenvolvedor C++ residente em Chicago, que trabalha na Hudson River Trading
  • Coapresentador do podcast Two’s Complement
  • Ativo no Mastodon e no Bluesky
  • O conteúdo do blog é distribuído sob a licença Creative Commons BY-NC 3.0 Unported

1 comentários

 
GN⁺ 2025-12-03
Comentários no Hacker News
  • Depois de ver as otimizações de compilador do Matt, vale a pena conferir também a entrevista que fiz com ele
    O que passei a acreditar é o seguinte: trabalhe no nível de abstração com o qual você se sente confortável, mas também precisa entender a camada logo abaixo
    Por exemplo, se você é programador em C, precisa saber como o runtime de C interage com o sistema operacional. Não é necessário conhecer todos os detalhes, mas é preciso ter noção de por onde começar quando surgir um problema
    O artigo da ACM Queue que o Matt escreveu também é antigo, mas continua sendo uma ótima introdução para entender esses conceitos de otimização

    • Ouvi de um professor na faculdade: “entenda a camada logo abaixo daquela em que você trabalha”. Isso ajudou muito na minha carreira
      Por exemplo, ao trabalhar com Java, entender a JVM me permitiu otimizar muito melhor o desempenho de software médico. E, além disso, simplesmente entender a camada abaixo também é divertido
    • Valeu, Adam 😊
  • Apesar de ele ser claramente um especialista no assunto, impressiona como explica tudo passo a passo a partir do básico, em vez de já mergulhar de cara no conjunto complexo de instruções x86

  • Matt Godbolt é uma verdadeira joia das comunidades de C e C++
    Acho que o mundo de muitos desenvolvedores ficou melhor graças ao Compiler Explorer e às contribuições dele

    • Como assim?! Godbolt é uma pessoa de verdade!?
  • Estou acompanhando o Advent of Computer Science Advent Calendars, Day 2

    • Acho que chegamos nesse ponto mesmo
  • Tenho bastante interesse na técnica de amalgamação de código usada pelo SQLite
    Segundo a equipe do SQLite, só essa abordagem já traz um ganho de desempenho de 5 a 10%. Gostaria que o Matt abordasse esse tema durante a sessão

    • Esse é um tema bem comum e, na prática, é menos uma otimização de compilador e mais um estilo de build chamado “unity build
      Referência: wiki de Unity build
    • Hoje em dia, LTO (Link Time Optimization) é mais usado do que unity build
      Ainda assim, como o LTO pode ser lento em builds não incrementais, unity build continua útil para builds pontuais
  • Trabalho com desenvolvimento de software há 25 anos, mas ainda me pergunto se estou usando as flags de compilador ideais

    • Pela minha experiência, menos flags é melhor
      Na maioria dos casos, -O2 já basta. A cada atualização do compilador, as otimizações internas melhoram, então quase nunca há necessidade de o desenvolvedor ajustar tudo manualmente
      Além disso, é arriscado adicionar flags com base em benchmarks ruins. Diferenças de desempenho de 1 a 2% são comuns dependendo do estado do sistema
      Se a estrutura do código mudar, a afinidade com cache também pode mudar e isso afetar o desempenho. Ou seja, pode não ser por causa da flag, mas da disposição do código
  • Estou animado com os posts que ainda faltam. Hoje de manhã ensinei o SBCL a otimizar os padrões (+ base (* index scale)) e (+ base (ash index n)) para uma única instrução LEA. Foi como aplicar imediatamente o que aprendi no Day 2

  • Nunca existe conteúdo demais do Godbolt

  • Gostaria que abordassem divisão por constantes inteiras. O capítulo correspondente de Hacker’s Delight é excelente, mas para o leitor comum ele parece um pouco difícil

  • Parece um Advent of Code para fãs de compiladores
    Adorei o formato de construir intuição com pequenas lições diárias de otimização
    Se você entende o que o compilador faz e por quê, acaba se tornando um programador melhor independentemente da linguagem que usa