Eu estava lendo minhas palestras e um dos slides listados abaixo dos fatores que afetam o desempenho da CPU. Não consigo entender como o processo de fabricação e a qualidade do compilador afetam o desempenho da CPU.
Eu estava lendo minhas palestras e um dos slides listados abaixo dos fatores que afetam o desempenho da CPU. Não consigo entender como o processo de fabricação e a qualidade do compilador afetam o desempenho da CPU.
Respostas:
A qualidade do compilador é a mais fácil ...
Bons compiladores sabem como transaltar código para instruções da CPU com eficiência.
Imagine que você tem um software que faz uma simples equação matemática - digamos 1 + 1. Um aplicativo compilado de forma inteligente informará a CPU para adicionar os números, armazenar a resposta e o trabalho será feito. Isso pode ser representado como:
Compiladores ruins (e eu já vi alguns!) Farão a mesma coisa, mas emitirão muitas instruções adicionais para fazer a mesma coisa, o que reduz o desempenho e diminui a velocidade do aplicativo. O mesmo exemplo:
Agora, lembre-se de que um aplicativo complexo como editor de vídeo, aplicativo gráfico, jogo e até mesmo um processador de texto pode precisar fazer centenas de milhares (se não dezenas de milhões) de operações apenas para iniciar! Esse é o impace de um bom compilador!
O processo de fabricação é uma extensão disso, pois a fabricação é a "colagem" ou vários aplicativos juntos por meio de funções compartilhadas. Se isso for bem-sucedido, é necessário menos poder de computação para obter o mesmo resultado final.
A qualidade (capacidade de otimização) do compilador determina quão bem o código da máquina é mapeado para os recursos de hardware. As otimizações do compilador podem reduzir a quantidade de trabalho realizado (por exemplo, desenrolar um loop pode reduzir o número de ramificações, a alocação de registradores pode reduzir o número de acessos à memória, o inlining pode remover a sobrecarga de chamadas e o código não utilizado pelo chamador específico), agendar o trabalho para evitar a espera (por exemplo, agendar cargas anteriormente para que instruções dependentes não precisem esperar), explorar instruções especializadas que executam o trabalho com mais eficiência (por exemplo, a vetorização pode usar instruções SIMD), organizar acessos à memória para explorar o comportamento do cache (por exemplo , transformando uma matriz de estruturas em uma estrutura de matrizes quando os loops internos tocam apenas alguns membros da estrutura).
(Algumas otimizações do compilador aplicam-se a todo ou à maioria dos hardwares; outras são mais específicas a implementações específicas de hardware. Além disso, mesmo que o suporte de hardware para execução fora de ordem melhore a execução de códigos menos bem programados, um bom agendamento de instruções ainda pode fornecer um valor mensurável. , se pequeno, benefício.)
O processo de fabricação determina o uso de energia, velocidade de comutação e área usada pelos transistores (e características semelhantes de outros componentes). Obviamente, os transistores que trocam mais rapidamente permitem maior desempenho. A redução da área por transistor permite que mais transistores sejam usados em um chip economicamente fabricável ( que pode ser traduzido em mais desempenho) e pode reduzir o tempo de comunicação entre os componentes (por exemplo, a latência do acesso ao cache é limitada pela distância e não apenas pela velocidade de comutação do transistor). O uso de energia restringe o desempenho (até certo ponto, quanto mais energia deve ser fornecida, mais "pinos" [esferas de solda] devem ser usados para fornecer essa energia, reduzindo o número potencialmente disponível para a comunicação do chip com a memória, E / S ou outros processadores; extrair o calor residual também apresenta um limite econômico). Uma menor energia de comutação significa que mais trabalho pode ser feito dentro de um determinado orçamento de energia; uma potência ociosa mais baixa ("vazamento") significa que mais transistores podem ser mantidos energizados e prontos para o trabalho (isso talvez seja particularmente importante para a SRAM, que sempre deve ser energizada para manter o estado).