quinta-feira, 15 de janeiro de 2015

GCC 4.9 e os cacarecos

Das notas de lançamento do GCC 4.9:

-march=generic has been retuned for better support of Intel core and AMD Bulldozer architectures. Performance of AMD K7, K8, Intel Pentium-M, and Pentium4 based CPUs is no longer considered important for generic.

Na verdade tem um erro no texto, pois não existe -march=generic, apenas -mtune=generic. Como todas as distribuições compilam seus pacotes com -mtune=generic, essa é uma excelente notícia! Ajustar código para processadores defuntos não fazia sentido. Os binários ainda rodarão em modelos que sejam compatíveis com o que estiver configurado em -march (nivelado por baixo geralmente: i686 para 32-bit e x86-64 para 64-bit), sem exigir instruções posteriores, mas o GCC otimizará para arquiteturas atuais.

Quando desempenho é um fator crítico, programas costumam ter assembly feito à mão para autodetectar e usar durante a execução instruções adicionais sem depender do compilador para gerar código de máquina em determinadas partes (um montador é usado). Ainda assim é bem-vindo o GCC dar uma otimizada geral onde conseguir.

2 comentários:

  1. Realmente não há motivos para ficar mantendo tanta tecnologia de legado. O próprio Linus tempos atrás falou que também o kernel Linux estava precisando de uma faxina urgente.

    ResponderExcluir
    Respostas
    1. Adicionarei as tags 'windows' e 'osx' neste post pois o GCC gera código para as duas plataformas também. Tem um monte de programa por aí compilado com o MinGW.

      Mesmo o Linux sendo um kernel monolítico (by design), a modularidade dos módulos (desculpe a redundância) dá conta da questão do uso de recursos. Não vejo como um problema gravíssimo. Os problemas mais urgentes estão no espaço de usuário.

      Excluir