1 pontos por GN⁺ 2023-07-07 | 1 comentários | Compartilhar no WhatsApp
  • Artigo que explora oportunidades de otimização em um loop de código C gerado pelo Clang
  • O loop incrementa ou decrementa números com base nos caracteres de uma string.
  • O autor reorganiza o loop para otimizar os caracteres 'p' e 's' em vez do terminador nulo.
  • O autor remove ramificações condicionais usando aritmética e movimentação condicional.
  • O código otimizado alcança um ganho expressivo de desempenho de 6,73 vezes em comparação com o código original.
  • O autor também testa outras técnicas de otimização, mas descobre que elas tornam o código mais lento.
  • A configuração de benchmark inclui uma CPU AMD Ryzen 5 5625U e versões mais recentes do Clang e do GCC.
  • A conclusão é que trabalho manual e otimização em assembly podem levar a ganhos substanciais de desempenho em casos específicos.

1 comentários

 
GN⁺ 2023-07-07
Comentários no Hacker News
  • O código original pode ser otimizado usando instruções if em vez de uma instrução switch.
  • Outra versão otimizada do código usa instruções sem desvio sete/cmov e pode alcançar a mesma velocidade do código assembly otimizado.
  • Uma versão vetorizada do código pode ser ainda mais rápida, se possível, usando instruções AVX-512.
  • Outros processadores podem ter características de desempenho diferentes dependendo dos desvios.
  • A linguagem C foi originalmente projetada para facilitar a tradução de código de nível de sistema entre plataformas, sacrificando alguns recursos para isso.