Compilando vs usando desempenho de binários pré-criados?

11

O desempenho será melhor (mais rápido) se eu compilar manualmente a fonte de um componente de software para a máquina real na qual ele será usado, em comparação com se a fonte foi compilada em outra plataforma, talvez para muitas arquiteturas diferentes? Eu obtive bons resultados ao compilar a fonte que baixei e me pergunto se isso ocorreu devido à compilação, em vez de baixar um binário pré-compilado, o que geralmente ocorre com atualizações de software.

Niklas
fonte
2
Compilar para compatibilidade com muitas arquiteturas potencialmente elimina certas otimizações que podem ser possíveis ao compilar para uma única arquitetura.
Robert Harvey
11
Além de ser mais direcionado (o que quase sempre será benéfico), você provavelmente também encontrará grandes diferenças entre os compiladores - compiladores diferentes suportam otimizações diferentes e, às vezes, os gargalos de desempenho podem ser otimizados por um, mas não pelo (s) outro (s).
Daniel B #

Respostas:

8

Em muitos casos (se não na maioria), sim. Isso porque o compilador pode produzir código nativo otimizado para essa CPU e ambiente em particular. O código é mais "direcionado".

epistemex
fonte
7

Compilar a partir de fontes oferece a vantagem de definir os sinalizadores do compilador da maneira que você deseja para sua plataforma específica. O download de um pacote que foi compilado com as mesmas configurações exatas que a sua não ofereceria nenhuma diferença, mas alterar as configurações dos padrões pode oferecer grandes melhorias.

Por exemplo, se os binários oferecidos para download foram compilados para depuração (intencionalmente ou por engano), ativar a otimização mais agressiva melhorará o desempenho em quase todas as situações. Por outro lado, se o código compilado for otimizado ao máximo, você não verá nenhuma diferença.

dasblinkenlight
fonte
Portanto, meu esforço de compilação pode não ter sido em vão. Eu baixei o código-fonte para mod_jk e compilei e ficou muito rápido e me pergunto se isso foi devido à compilação manual. Obrigado pela resposta.
Niklas #
1

Isso realmente depende dos dois compiladores e sinalizadores de compilador usados. Normalmente, as configurações do compilador e sinalizador na sua máquina local são mais apropriadas para a sua máquina em particular, se você tiver as coisas definidas corretamente.

Porém, se, por exemplo, o binário pré-criado tiver sido construído com um compilador de otimização muito melhor (ou um benchmark especial projetado com sinalizadores ajustados para esse trecho de código específico e, por sorte, apropriado para o seu sistema) em comparação com o compilador no seu sistema, é possível que qualquer compilador que esteja no seu sistema possa realmente produzir um desempenho pior.

hotpaw2
fonte