Por que todos os núcleos da CPU têm a mesma velocidade em vez de diferentes?

Se você já fez muitas comparações para comprar uma nova CPU, deve ter notado que todos os núcleos parecem ter a velocidade em vez de uma combinação de diferentes. Por que é que? O post de perguntas e respostas do superusuário de hoje tem a resposta para a pergunta de um leitor curioso.

A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser – uma subdivisão do Stack Exchange, um grupo de sites de perguntas e respostas voltado para a comunidade.

A questão

O leitor de superusuário Jamie quer saber por que todos os núcleos da CPU têm a mesma velocidade em vez de diferentes:

Em geral, se você está comprando um novo computador, deve determinar qual processador comprar com base na carga de trabalho esperada para o computador. O desempenho em videogames tende a ser determinado pela velocidade de um único núcleo, 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, todos os processadores parecem ter aproximadamente a mesma velocidade com as principais diferenças sendo mais threads ou mais núcleos.

Por exemplo:

  • Intel Core i5-7600K, frequência base 3,80 GHz, 4 núcleos, 4 threads
  • Intel Core i7-7700K, frequência base 4,20 GHz, 4 núcleos, 8 threads
  • AMD Ryzen 5 1600X, frequência base 3,60 GHz, 6 núcleos, 12 threads
  • AMD Ryzen 7 1800X, frequência base 3,60 GHz, 8 núcleos, 16 threads

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 existem variantes com velocidades de clock diferentes? 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, 16 GHz no máximo), 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 igualmente boa em cargas de trabalho de thread único, mas potencialmente melhor em cargas de trabalho de vários threads?

Eu pergunto isso como uma pergunta geral e não especificamente em relação às CPUs listadas acima ou sobre qualquer carga de trabalho específica. Estou apenas curioso para saber por que o padrão é o que é.

Por que todos os núcleos da CPU têm a mesma velocidade em vez de diferentes?

Recomendado:  Como ver miniaturas de todas as suas janelas abertas no Windows 10

A resposta

O contribuidor do SuperUser bwDraco tem a resposta para nós:

Isso é conhecido como multiprocessamento heterogêneo (HMP) e é amplamente adotado por dispositivos móveis. Em dispositivos baseados em ARM que implementam big.LITTLE , o processador contém núcleos com diferentes perfis de desempenho e energia, ou seja, alguns núcleos funcionam rápido, mas consomem muita energia (arquitetura mais rápida e / ou relógios mais altos), 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 conforme você aumenta o desempenho depois de passar de um certo ponto. A ideia aqui é obter desempenho quando você precisar e vida útil da bateria quando você não precisar.

Em plataformas de desktop, o consumo de energia é muito menos problemático, então isso não é realmente necessário. A maioria dos aplicativos espera que cada núcleo tenha características de desempenho semelhantes, e agendar processos para sistemas HMP é muito mais complexo do que agendar sistemas tradicionais de multiprocessamento simétrico (SMP) (tecnicamente, o Windows 10 tem suporte para HMP, mas é destinado principalmente para dispositivos móveis dispositivos que usam ARM big.LITTLE).

Além disso, a maioria dos processadores para desktops e laptops de hoje não são termicamente ou eletricamente limitados ao ponto em que alguns núcleos precisam rodar mais rápido do que outros, mesmo para rajadas curtas. Basicamente, chegamos ao limite de quão rápido podemos fazer núcleos individuais , portanto, substituir alguns núcleos por outros mais lentos não permitirá que os núcleos restantes funcionem mais rápido.

Embora existam alguns processadores para desktop que têm um ou dois núcleos capazes de funcionar mais rápido do que os outros, essa capacidade está atualmente limitada 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 pesadamente encadeadas, isso adicionaria uma complexidade considerável ao projeto do processador e os aplicativos provavelmente não o suportarão de maneira adequada.

Considere um processador hipotético com dois núcleos Kaby Lake (7ª geração) rápidos e oito núcleos Goldmont (Atom) lentos . Você teria um total de 10 núcleos, e as cargas de trabalho altamente segmentadas otimizadas para esse tipo de processador podem ter 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 totalmente diferentes e os núcleos lentos nem mesmo suportam algumas das instruções que os núcleos rápidos suportam, como AVX (o ARM evita esse problema exigindo que os núcleos grandes e PEQUENOS suportem as mesmas instruções )

Mais uma vez, a maioria dos aplicativos multithread baseados no Windows presumem que cada núcleo tem o mesmo ou quase o mesmo nível de desempenho e pode executar as mesmas instruções, portanto, esse tipo de assimetria provavelmente resultará em um desempenho abaixo do ideal, talvez até trava se usar instruções não suportadas pelos núcleos mais lentos. Embora a Intel possa modificar os núcleos lentos para adicionar suporte avançado de instrução para que todos os núcleos possam executar todas as instruções, isso não resolveria os problemas com 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 aceleração de porções 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 Arquitetura de Sistema Heterogênea , embora isso não tenha visto muita aceitação da indústria fora de alguns aplicativos especializados.


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 .

Recomendado:  Virtualmente esquecido: o menino virtual da Nintendo, 25 anos depois

Crédito da imagem: Mirko Waltermann (Flickr)