Como um compilador pode afetar o desempenho da CPU?
Nos compiladores mais antigos, como visto em outras respostas, o código da máquina gerada incluía instruções extras. Se você comparar a performance da CPU usando esse código com o código gerado cuidadosamente à mão, a CPU com o código gerado pelo compilador parecia ser muito mais lenta. Ao longo do tempo, os compiladores adicionaram fases de otimização que identificaram padrões comuns e os simplificaram. Eventualmente, com recursos de otimização suficientes, o código típico gerado pelo compilador era melhor que todos, exceto o código otimizado manualmente mais cuidadosamente estudado. A maioria dos programadores gerais pararam de pensar na otimização do código e, em vez disso, concentraram-se na melhoria do algoritmo.
P>Paralisou, as pessoas queriam comparar a performance da CPU para saber quem tinha as melhores máquinas. Quando eu trabalhava em computadores Convex (uma empresa de máquinas vetoriais), aplicar vetorização (um recurso muito avançado na época) poderia melhorar a performance em 2x a 5x para código adequado para ser vetorizado. Essa vantagem na otimização de compiladores ajudou a Convex a ser líder/superviente em seu nicho de mercado em uma época em que mais de 80% de seus concorrentes saíam do mercado.
Conteúdo lateral: em um caso, um cliente não havia incluído a chave "vetorizar" do compilador no código de produção. Nosso engenheiro de vendas descobriu este lapso e ajudou o programador do cliente a ser um herói dentro de sua empresa, demonstrando a grande melhoria ao usar as melhores características do compilador para ganhar 5x de desempenho em uma grande aplicação do cliente.
Durante os anos 2000, as melhorias na taxa de relógio estavam diminuindo e a ênfase na arquitetura do computador estava em melhorar o pipeline da CPU, ajustando como as instruções e o cache de dados funcionavam, reduzindo os relógios necessários para instruções individuais e medidas similares. Eu trabalhei para a Sun que construiu e vendeu CPUs de arquitetura Sparc. Avaliávamos novos processadores usando a série de referência da SPECcpu. A diferença no desempenho entre usar o ajuste do compilador para o processador Sparc anterior no novo processador Sparc e usar o ajuste do compilador para o novo processador Sparc no novo processador Sparc era frequentemente até um ganho de 20% no desempenho da CPU. O ajuste afetou o agendamento de instruções e muitos detalhes finos da otimização do compilador em código do mundo real. Esse ganho de 20% teve um grande impacto na percepção do cliente sobre o novo processador e ajudou a encorajar a aceitação do cliente.
Você pode ver a partir desses exemplos que as diferenças do compilador fizeram e farão uma grande diferença na performance da CPU. Uma análise simples baseada em instruções por segundo ou contagem de ciclos ou abordagens semelhantes pode ser seriamente enganadora.
Opção do benchmark a usar também pode ser um grande problema. Escolher um benchmark que não corresponda ao seu uso pretendido do computador irá frequentemente enganá-lo sobre o melhor sistema para o seu propósito. Esse é outro tópico de discussão.
Artigos semelhantes
- Qual é a diferença entre uma CPU de console e uma CPU de PC?
- Qual é a diferença entre um socket 'CPU FAN', um socket 'CPU OPT' e um socket 'SYS FAN' na placa-mãe?
- Usar a mesma conta Netflix como alguém de um país diferente vai afetar o que eu posso assistir?
- Por que jogos como PUBG e Fortnite não podem mais ser jogados com a atualização do iOS 13? Não vai afetar o mercado e as vendas do iPhone 11?