Por que todos os núcleos de CPU têm a mesma velocidade em vez de diferentes?
Se você já fez muita comparação para comprar uma nova CPU, você deve ter notado que todos os núcleos parecem ter a velocidade e não uma combinação de diferentes. Por que é que? O post de perguntas e respostas do SuperUser de hoje tem a resposta para a pergunta de um curioso leitor.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
A questão
Leitor de Superusuário Jamie quer saber porque todos os núcleos de CPU têm a mesma velocidade em vez de diferentes:
Em geral, se você está comprando um novo computador, você determinaria qual processador comprar com base na carga de trabalho esperada para o computador. O desempenho em videogames tende a ser determinado pela velocidade de núcleo único, enquanto aplicativos como edição de vídeo são determinados pelo número de núcleos. Em termos do que está disponível no mercado, todas as CPUs parecem ter aproximadamente a mesma velocidade, com as principais diferenças sendo mais segmentos ou mais núcleos.
Por exemplo:
- Intel Core i5-7600K, frequência base de 3,80 GHz, 4 núcleos, 4 fios
- Intel Core i7-7700K, frequência base de 4,20 GHz, 4 núcleos, 8 fios
- AMD Ryzen 5 1600X, frequência base de 3,60 GHz, 6 núcleos, 12 linhas
- AMD Ryzen 7 1800X, frequência base de 3,60 GHz, 8 núcleos, 16 fios
Por que vemos esse padrão de núcleos crescentes, mas todos os núcleos têm a mesma velocidade de clock? Por que não há variantes com diferentes velocidades de clock? Por exemplo, dois núcleos “grandes” e muitos núcleos pequenos.
Em vez de, digamos, quatro núcleos a 4,0 GHz (ou seja, 4 × 4 GHz, máximo de 16 GHz), que tal uma CPU com dois núcleos rodando a 4.0 GHz e quatro núcleos rodando a 2.0 GHz (ou seja, 2 × 4.0 GHz + 4 × 2.0 GHz, máximo de 16 GHz)? A segunda opção seria tão boa em cargas de trabalho de encadeamento único, mas potencialmente melhor em cargas de trabalho multiencadeadas??
Eu pergunto isso como uma questão geral e não especificamente com relação às CPUs listadas acima ou sobre qualquer carga de trabalho específica. Eu só estou curioso para saber porque o padrão é o que é.
Por que todos os núcleos de CPU têm a mesma velocidade em vez de diferentes?
A resposta
Colaborador da SuperUser A bwDraco tem a resposta para nós:
Isso é conhecido como multiprocessamento heterogêneo (HMP) e é amplamente adotado por dispositivos móveis. Nos dispositivos baseados em ARM que implementam big.LITTLE, o processador contém núcleos com diferentes perfis de desempenho e potência, ou seja, alguns núcleos são executados rapidamente, mas consomem muita energia (arquitetura mais rápida e / ou mais alta) enquanto outros são eficientes em termos de energia, mas lentos ( arquitetura mais lenta e / ou relógios mais baixos). Isso é útil porque o uso de energia tende a aumentar desproporcionalmente à medida que você aumenta o desempenho quando passa de um certo ponto. A ideia aqui é obter desempenho quando você precisar e bateria, quando você não.
Em plataformas de desktop, o consumo de energia é um problema muito menor, portanto, isso não é realmente necessário. A maioria dos aplicativos espera que cada núcleo tenha características de desempenho semelhantes, e os processos de agendamento para sistemas HMP são muito mais complexos do que o agendamento de sistemas tradicionais de SMP (tecnicamente, o Windows 10 tem suporte para HMP, mas destina-se principalmente a dispositivos móveis dispositivos que usam o ARM big.LITTLE).
Além disso, a maioria dos processadores de desktop e laptop atualmente não é termicamente ou eletricamente limitada ao ponto em que alguns núcleos precisam ser executados mais rapidamente do que outros, mesmo para rajadas curtas. Basicamente, atingimos uma parede com a rapidez com que conseguimos fazer núcleos individuais, por isso, a substituição de alguns núcleos por outros mais lentos não permitirá que os núcleos restantes sejam executados mais rapidamente.
Embora existam alguns processadores de desktop com um ou dois núcleos capazes de funcionar mais rápido do que os outros, esse recurso está atualmente limitado a determinados processadores Intel de ponta (conhecidos como Turbo Boost Max Technology 3.0) e envolve apenas um ligeiro ganho em desempenho para os núcleos que podem ser executados mais rapidamente.
Embora seja certamente possível projetar um processador x86 tradicional com núcleos grandes e rápidos e núcleos menores e mais lentos para otimizar cargas de trabalho altamente encadeadas, isso acrescentaria uma complexidade considerável ao design do processador e é improvável que os aplicativos o suportem adequadamente.
Considere um processador hipotético com dois núcleos rápidos de Kaby Lake (sétima geração) e oito núcleos lentos Goldmont (Atom). Você teria um total de 10 núcleos e cargas de trabalho altamente segmentadas otimizadas para esse tipo de processador podem obter um ganho de desempenho e eficiência em relação a um processador Kaby Lake quad-core normal. No entanto, os diferentes tipos de núcleos têm níveis de desempenho bastante diferentes, e os núcleos lentos nem mesmo suportam algumas das instruções que os núcleos rápidos suportam, como o AVX (o ARM evita esse problema exigindo que os núcleos grande e LITTLE suportem as mesmas instruções ).
Novamente, a maioria dos aplicativos multiencadeados baseados no Windows pressupõem que cada núcleo tenha o mesmo nível de desempenho ou quase o mesmo nível de desempenho e possa executar as mesmas instruções, portanto esse tipo de assimetria provavelmente resultará em desempenho abaixo do ideal, talvez até mesmo falha se usar instruções não suportadas pelos núcleos mais lentos. Embora a Intel pudesse modificar os núcleos lentos para adicionar suporte de instruções avançado para que todos os núcleos pudessem executar todas as instruções, isso não resolveria problemas com o suporte de software para processadores heterogêneos.
Uma abordagem diferente para o design de aplicativos, mais próxima do que você provavelmente está pensando em sua pergunta, usaria a GPU para acelerar partes altamente paralelas de aplicativos. Isso pode ser feito usando APIs como OpenCL e CUDA. Quanto a uma solução de chip único, a AMD promove suporte de hardware para aceleração de GPU em suas APUs, que combina uma CPU tradicional e uma GPU integrada de alto desempenho no mesmo chip, como a arquitetura de sistemas heterogêneos, embora isso não tenha ocorrido muito de algumas aplicações especializadas.
Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.
Crédito de imagem: Mirko Waltermann (Flickr)