Sumário
Economia. É mais barato e fácil projetar uma CPU com mais núcleos que uma velocidade de clock mais alta, porque:
Aumento significativo no uso de energia. O consumo de energia da CPU aumenta rapidamente à medida que você aumenta a velocidade do clock - você pode dobrar o número de núcleos operando em uma velocidade menor no espaço térmico necessário para aumentar a velocidade do clock em 25%. Quádruplo para 50%.
Existem outras maneiras de aumentar a velocidade de processamento seqüencial, e os fabricantes de CPU fazem bom uso delas.
Eu vou me basear nas excelentes respostas desta pergunta em um dos sites irmãos da SE. Então vá votar eles!
Limitações da velocidade do relógio
Existem algumas limitações físicas conhecidas na velocidade do relógio:
Tempo de transmissão
O tempo que leva para um sinal elétrico atravessar um circuito é limitado pela velocidade da luz. Esse é um limite rígido e não há maneira conhecida de contorná-lo 1 . Em relógios gigahertz, estamos chegando a esse limite.
No entanto, ainda não estamos lá. 1 GHz significa um nanossegundo por tick de clock. Nesse período, a luz pode percorrer 30 cm. A 10 GHz, a luz pode percorrer 3 cm. Como um único núcleo de CPU tem cerca de 5 mm de largura, abordaremos esses problemas em algum lugar além dos 10 GHz. 2
Atraso de comutação
Não basta apenas considerar o tempo que leva para um sinal viajar de um extremo ao outro. Também precisamos considerar o tempo que leva para um gate lógico dentro da CPU mudar de um estado para outro! À medida que aumentamos a velocidade do relógio, isso pode se tornar um problema.
Infelizmente, não tenho certeza sobre os detalhes e não posso fornecer números.
Aparentemente, injetar mais energia nele pode acelerar a comutação, mas isso leva a problemas de consumo de energia e dissipação de calor. Além disso, mais energia significa que você precisa de conduítes mais volumosos capazes de lidar com isso sem danos.
Dissipação de calor / consumo de energia
Este é o grande. Citando a resposta de fuzzyhair2 :
Os processadores recentes são fabricados usando a tecnologia CMOS. Toda vez que há um ciclo de relógio, a energia é dissipada. Portanto, velocidades mais altas do processador significam mais dissipação de calor.
Existem algumas medidas adoráveis neste tópico do fórum da AnandTech , e elas até derivaram uma fórmula para o consumo de energia (que anda de mãos dadas com o calor gerado):
Crédito para Idontcare
Podemos visualizar isso no gráfico a seguir:
Crédito para Idontcare
Como você pode ver, o consumo de energia (e o calor gerado) aumenta extremamente rapidamente à medida que a velocidade do relógio aumenta após um certo ponto. Isso torna impraticável aumentar a velocidade do relógio sem limites.
A razão do rápido aumento no uso de energia provavelmente está relacionada ao atraso na comutação - não é suficiente simplesmente aumentar a energia proporcional à taxa de clock; a tensão também deve ser aumentada para manter a estabilidade em relógios mais altos. Isso pode não estar completamente correto; sinta-se à vontade para apontar correções em um comentário ou faça uma edição nesta resposta.
Mais núcleos?
Então, por que mais núcleos? Bem, eu não posso responder isso definitivamente. Você teria que perguntar ao pessoal da Intel e da AMD. Mas você pode ver acima que, com as CPUs modernas, em algum momento torna-se impraticável aumentar a velocidade do clock.
Sim, o multicore também aumenta a energia necessária e a dissipação de calor. Mas evita claramente o tempo de transmissão e os problemas de atraso de comutação. E, como você pode ver no gráfico, pode facilmente dobrar o número de núcleos em uma CPU moderna com a mesma sobrecarga térmica de um aumento de 25% na velocidade do clock.
Algumas pessoas fizeram isso - o atual recorde mundial de overclocking está a apenas 9 GHz. Mas é um desafio significativo da engenharia fazer isso, mantendo o consumo de energia dentro de limites aceitáveis. Em algum momento, os designers decidiram que adicionar mais núcleos para realizar mais trabalhos em paralelo proporcionaria um aumento mais efetivo do desempenho na maioria dos casos.
É aí que entra a economia - provavelmente era mais barato (menos tempo de projeto, menos complicado de fabricar) seguir a rota multicore. E é fácil de comercializar - quem não ama o novo chip octa-core ? (Obviamente, sabemos que o multicore é bastante inútil quando o software não o utiliza ...)
Não é uma desvantagem para multicore: você precisa de mais espaço físico para colocar o núcleo extra. No entanto, os tamanhos de processo da CPU diminuem constantemente, por isso há muito espaço para colocar duas cópias de um design anterior - a verdadeira desvantagem é não conseguir criar núcleos únicos maiores, mais complexos e mais complexos. Por outro lado, aumentar a complexidade do núcleo é uma coisa ruim do ponto de vista do design - mais complexidade = mais erros / bugs e erros de fabricação. Parece que encontramos um meio feliz com núcleos eficientes, simples o suficiente para não ocupar muito espaço.
Já atingimos um limite com o número de núcleos que podemos ajustar em uma única matriz nos tamanhos de processo atuais. Podemos atingir um limite de quão longe podemos encolher as coisas em breve. Então o que vem depois? Precisamos de mais? Isso é difícil de responder, infelizmente. Alguém aqui é clarividente?
Outras maneiras de melhorar o desempenho
Portanto, não podemos aumentar a velocidade do relógio. E mais núcleos têm uma desvantagem adicional - ou seja, eles só ajudam quando o software executado neles pode fazer uso deles.
Então, o que mais podemos fazer? Como as CPUs modernas são muito mais rápidas que as mais antigas na mesma velocidade de clock?
A velocidade do relógio é realmente apenas uma aproximação muito aproximada do funcionamento interno de uma CPU. Nem todos os componentes de uma CPU funcionam nessa velocidade - alguns podem operar uma vez a cada dois ticks, etc.
O mais significativo é o número de instruções que você pode executar por unidade de tempo. Essa é uma medida muito melhor do quanto um único núcleo de CPU pode realizar. Algumas instruções; alguns terão um ciclo de relógio, outros, três. A divisão, por exemplo, é consideravelmente mais lenta que a adição.
Portanto, poderíamos melhorar o desempenho de uma CPU aumentando o número de instruções que ela pode executar por segundo. Quão? Bem, você poderia tornar uma instrução mais eficiente - talvez a divisão agora leve apenas dois ciclos. Depois, há o pipelining de instruções . Ao dividir cada instrução em vários estágios, é possível executar instruções "em paralelo" - mas cada instrução ainda possui uma ordem seqüencial e bem definida, correspondente às instruções antes e depois dela, para que não exija suporte de software como multicore faz.
Existe outra maneira: instruções mais especializadas. Vimos coisas como o SSE, que fornece instruções para processar grandes quantidades de dados ao mesmo tempo. Existem novos conjuntos de instruções constantemente sendo introduzidos com objetivos semelhantes. Novamente, eles requerem suporte de software e aumentam a complexidade do hardware, mas fornecem um bom aumento de desempenho. Recentemente, houve o AES-NI, que fornece criptografia e descriptografia AES aceleradas por hardware, muito mais rapidamente do que um monte de aritmética implementada em software.
1 Não sem se aprofundar bastante na física quântica teórica.
2 Na verdade, pode ser menor, pois a propagação do campo elétrico não é tão rápida quanto a velocidade da luz no vácuo. Além disso, isso é apenas para a distância em linha reta - é provável que exista pelo menos um caminho consideravelmente maior que uma linha reta.