Questão Por que temos CPUs com todos os núcleos nas mesmas velocidades e não combinações de velocidades diferentes?


Em geral, se você está comprando um novo computador, você determinaria qual processador comprar com a carga de trabalho esperada. O desempenho em jogos 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 threads ou mais núcleos.

Por exemplo:

  • Intel Core i5-7600K, frequência base 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

Então, por que vemos esse padrão de núcleos crescentes com todos os núcleos tendo a mesma velocidade de clock?

Por que não temos variantes com diferentes velocidades de clock? Por exemplo, dois núcleos "grandes" e muitos núcleos pequenos.

Por exemplo, em vez de, digamos, quatro núcleos a 4,0 GHz (ou seja, 4x4 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 GHz (ou seja, 2x4.0 GHz + 4x2,0 GHz ~ 16 GHz no máximo). A segunda opção não seria igualmente boa em cargas de trabalho de encadeamento único, mas potencialmente melhor em cargas de trabalho de vários encadeamentos?

Eu faço essa pergunta como um ponto geral - não especificamente sobre os processadores listados acima, ou sobre qualquer carga de trabalho específica específica. Estou curioso para saber porque o padrão é como é.


79


origem


Há muitos celulares com núcleos rápidos e lentos, e em quase todos os servidores multi-core modernos, o núcleo do CPU acelera independentemente do clock, dependendo da carga, alguns até desligam os núcleos quando não são usados. Em um computador de propósito geral, onde você não projeta para economizar energia, no entanto, ter apenas dois tipos de núcleos (CPU e GPU) apenas torna a plataforma mais flexível. - eckes
Antes do programador de encadeamentos poder fazer uma escolha inteligente sobre qual núcleo usar, ele teria que determinar se um processo pode tirar proveito de múltiplos núcleos. Fazer isso de maneira confiável seria altamente problemático e propenso a erros. Particularmente quando isso pode mudar dinamicamente de acordo com as necessidades do aplicativo. Em muitos casos, o escalonador teria que fazer uma escolha ótima quando o melhor núcleo estivesse em uso. Núcleos idênticos tornam as coisas mais simples, fornecem flexibilidade máxima e geralmente têm o melhor desempenho. - LMiller7
Velocidades de clock não podem ser razoavelmente consideradas aditivas da maneira que você descreveu. Ter quatro núcleos rodando a 4 Ghz não significa que você tenha um "total" de 16 GHz, nem significa que esses 16 Ghz poderiam ser particionados em 8 processadores rodando a 2 Ghz ou 16 processadores rodando a 1 GHz. - Bob Jarvis
A premissa da questão é simplesmente errada. CPUs modernas são perfeitamente capazes de rodar núcleos em velocidades diferentes - phuclv
CPU multi-core: posso dizer que tenho uma CPU 3x2.1GHz = 6.3GHz?, Como faço para calcular a velocidade do clock em processadores multi-core?, - phuclv


Respostas:


Isso é conhecido como multiprocessamento heterogêneo (HMP) e é amplamente adotado por dispositivos móveis. Nos dispositivos baseados em ARM que implementam grande pequeno, o processador contém núcleos com diferentes perfis de desempenho e potência, e. alguns núcleos são executados rapidamente, 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 à medida que você aumenta o desempenho quando passa de um certo ponto. A ideia aqui é obter desempenho quando você precisa e bateria quando você não precisa.

Em plataformas de desktop, o consumo de energia é um problema muito menor, portanto, isso não é realmente necessário. A maioria das aplicações 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 SMP tradicionais. (O Windows 10 tecnicamente tem suporte para HMP, mas destina-se principalmente a dispositivos móveis que usam o ARM big.LITTLE.)

Além disso, a maioria dos processadores de desktop e laptop hoje não termicamente ou eletricamente limitado ao ponto em que alguns núcleos precisam ser executados mais rapidamente que outros, mesmo para rajadas curtas. Basicamente, atingimos a parede com a rapidez com que podemos criar núcleos individuaisAssim, 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 que os outros, esse recurso está atualmente limitado a determinados processadores Intel de ponta (como Turbo Boost Max Technology 3.0) e envolve apenas um leve ganho de desempenho. para esses 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.

Tome um processador hipotético com dois rápido Kaby Lake Núcleos de 7ª geração) e oito lentas Goldmont (Atom) núcleos. Você teria um total de 10 núcleos e cargas de trabalho altamente segmentadas e otimizadas para esse tipo de processador podem obter um ganho de desempenho e eficiência em relação a um núcleo quádruplo normal. Kaby Lake processador. 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 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õe que cada núcleo tem o mesmo nível de desempenho ou quase o mesmo nível e pode executar as mesmas instruções, portanto esse tipo de assimetria provavelmente resultará em desempenho menor do que o ideal, talvez até falhas Ele usa instruções não suportadas pelos núcleos 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 os 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 combinam uma CPU tradicional e uma GPU integrada de alto desempenho no mesmo chip, Arquitetura de sistemas heterogêneos, embora isso não tenha visto muita aceitação da indústria fora de alguns aplicativos especializados.


81



O Windows já tem uma noção de 'Apps', 'Processos em segundo plano' e 'Processos do Windows'. Então isso não se estende a um nível de hardware? - Jamie
@Jamie Um processo de "segundo plano" obtém fatias de tempo menores e é mais provável que seja interrompido. O Windows 10, em certa medida, conta para sistemas HMP, embora não haja muita informação sobre como. - Bob
Então eu acho que depois da edição o @bwDraco respondeu por mim. Se houvesse um processador 'misto', ele poderia facilmente suportar o mesmo conjunto de instruções se fosse construído dessa forma, então precisaríamos de algum tipo de agendador para escolher o núcleo certo. Eu estou pensando que realmente os aplicativos que se beneficiam de ir a muitos núcleos pequenos provavelmente se beneficiariam ainda mais de irem para muitos e muitos núcleos realmente pequenos. Assim, temos aceleração de GPU. - Jamie
Note que o gabinete da GPU não está negociando 2 grandes núcleos para 10 núcleos pequenos e lentos, mas sim o equivalente (muito difícil) de trocar 2 grandes núcleos por 1024 núcleos pequenos e lentos. Massivamente paralela, não apenas um pouco mais paralela. - Yakk
A Intel provavelmente poderia obter um núcleo Goldmont para executar instruções AVX2 sem muito silício extra (lentamente, decodificando para pares de 128 b ops). O Knight's Landing (Xeon Phi) tem núcleos baseados no Silvermont com o AVX512, então não é impossível modificar o Silvermont. Mas KNL adiciona execução fora de ordem para instruções vetoriais, enquanto Silver / Goldmont normal só faz OOO por inteiro, então eles provavelmente querem projetá-lo mais perto de Goldmont do que KNL. De qualquer forma, insn sets não são um problema real. É o suporte do sistema operacional e o pequeno benefício que são os obstáculos reais para se gastar a área da matriz em um núcleo de baixa energia. - Peter Cordes


O que você está perguntando é por que os sistemas atuais estão usando Multiprocessamento Simétrico ao invés de Multiprocessamento assimétrico.

Multiprocessamento assimétrico foi usado antigamente, quando um computador era enorme e abrigava várias unidades.

CPUs modernas são lançadas como uma unidade, em um dado, onde é muito mais simples não para misturar CPUs de diferentes tipos, já que todos compartilham o mesmo barramento e RAM.

Há também a restrição do relógio que governa os ciclos da CPU e Acesso RAM. Isso se tornará impossível quando misturar CPUs de diferentes velocidades. Computadores experimentais sem relógio existiam e eram até bonitos rápido, mas as complexidades do hardware moderno impuseram uma arquitetura.

Por exemplo, os núcleos Sandy Bridge e Ivy Bridge não podem estar sendo executados em velocidades diferentes ao mesmo tempo, já que o barramento de cache L3 é executado na mesma velocidade de clock dos núcleos, portanto, para evitar problemas de sincronização, todos precisam executar a essa velocidade ou ser estacionado / desligado (link: Arquitetura Sandy Bridge da Intel exposta). (Também verificado nos comentários abaixo para o Skylake.)

[EDITAR] Algumas pessoas erraram minha resposta para dizer que misturar CPUs é impossível. Para o seu benefício, eu declaro: Mixing de CPUs diferentes não está além da tecnologia de hoje, mas não é feito - "por que não" é a questão. Como respondido acima, isso seria tecnicamente complicado, portanto, mais caro e por muito pouco ou nenhum ganho financeiro, por isso não interessa aos fabricantes.

Aqui estão as respostas para alguns comentários abaixo:

Turbo boost muda a velocidade da CPU para que eles posso ser alterado

Turbo boost é feito acelerando o relógio e mudando alguns multiplicadores, que é exatamente o que as pessoas fazem quando fazem overclock, exceto que o hardware faz isso por nós. O relógio é compartilhado entre núcleos na mesma CPU, então isso acelera uniformemente todo o processador e todos os seus núcleos.

Alguns telefones têm mais de uma CPU de diferentes velocidades

Esses telefones geralmente têm um firmware personalizado e uma pilha de software associada cada CPU, mais como dois processadores separados (ou como CPU e GPU), e eles não têm visão única da memória do sistema. Essa complexidade é difícil de programar e assim O multiprocessamento assimétrico foi deixado no reino móvel, uma vez que requer desenvolvimento de software próximo ao hardware de baixo nível, que é evitado pelo sistema operacional de desktop de uso geral. Esta é a razão pela qual tais configurações não são encontradas no PC (exceto para CPU / GPU se esticarmos a definição).

Meu servidor com 2x Xeon E5-2670 v3 (12 núcleos com HT) atualmente tem núcleos em 1,3 GHz, 1,5 GHz, 1,6 GHz, 2,2 GHz, 2,5 GHz, 2,7 GHz, 2,8 GHz, 2,9 GHz e muitas outras velocidades.

Um núcleo é ativo ou ocioso. Todos os núcleos ativos ao mesmo tempo são executados na mesma frequência. O que você está vendo é apenas um artefato do tempo ou da média. Eu também notei que o Windows não estaciona um núcleo por um longo tempo, mas, em vez disso, separa / desarma todos os núcleos muito mais rápido que a taxa de atualização do Monitor de Recursos, mas não sei o motivo desse comportamento que provavelmente está por trás do comentário acima.

Os processadores Intel Haswell possuem reguladores de voltagem integrados que permitem voltagens e freqüências individuais para cada núcleo

Reguladores de tensão individuais diferem da velocidade do clock. Nem todos os núcleos são idênticos - alguns são mais rápidos. Núcleos mais rápidos recebem um pouco menos de energia, criando o espaço para aumentar a potência dada aos núcleos mais fracos. Os reguladores de tensão do núcleo serão ajustados o mais baixo possível para manter a velocidade atual do clock. A unidade de controle de energia na CPU regula as tensões e substituirá as solicitações do sistema operacional quando necessário para os núcleos com qualidade diferente. Resumo: Os reguladores individuais são para fazer com que todos os núcleos operem economicamente na mesma velocidade de clock, não para definir velocidades centrais individuais


66



Ah mais mshorter e ao ponto. +1 - Hennes
@harrymc existem blocos sincronizadores que o gerenciam perfeitamente; A DRAM é mais lenta do que a velocidade do núcleo, e você pode ter os núcleos da Intel rodando em diferentes velocidades dinamicamente no mesmo chip. - pjc50
Os processadores Intel Core-series rodam em velocidades diferentes no mesmo dado o tempo todo. - Nick T
A única existência de arquiteturas big.LITTLE e aumento de clock indepenente do núcleo prova que você está errado. O multiprocessamento heterogêneo é o mainstream. isto posso ser feito, é feito em telefones, mas para alguma razão não em desktops. - Agent_L
@Agent_L: O motivo é a complexidade. As CPUs de desktop já são caras o suficiente. Então, repito: tudo é possível, mas a questão real é por que isso não é feito, não se isso pode ser feito. Não me ataque como se eu tivesse alegado que isso é impossível - tudo o que eu digo é que é muito complicado e caro e por muito pouco ganho para interessar os fabricantes. - harrymc


Por que não temos variantes com diferentes velocidades de clock? ie. 2 núcleos 'grandes' e muitos núcleos pequenos.

É possível que o telefone em seu bolso tenha exatamente esse arranjo - o BRAÇO big.LITTLE funciona exatamente como você descreveu. Não há nem mesmo uma diferença de velocidade de clock, eles podem ser tipos de núcleo completamente diferentes - normalmente, os mais lentos são até "mais burros" (sem execução fora de ordem e outras otimizações de CPU).

É uma boa idéia essencialmente economizar bateria, mas tem suas próprias deficiências; a contabilidade para mover coisas entre diferentes CPUs é mais complicada, a comunicação com o resto dos periféricos é mais complicada e, mais importante, para usar tais núcleos efetivamente o agendador de tarefas tem que ser extremamente inteligente (e muitas vezes "adivinhar corretamente") .

O arranjo ideal é executar tarefas de segundo plano que não sejam de tempo crítico ou tarefas interativas relativamente pequenas nos "pequenos" núcleos e despertar os "grandes" apenas para cálculos grandes e longos (onde o tempo extra gasto nos pequenos núcleos acaba comendo mais bateria) ou para tarefas interativas de tamanho médio, em que o usuário sente lentidão nos pequenos núcleos.

No entanto, o agendador tem informações limitadas sobre o tipo de trabalho que cada tarefa pode estar executando e tem que recorrer a alguma heurística (ou informações externas, como forçar alguma máscara de afinidade em uma determinada tarefa) para decidir onde agendá-las. Se isso der errado, você pode acabar desperdiçando muito tempo / energia para executar uma tarefa em um núcleo lento e dar uma má experiência ao usuário, ou usar os "grandes" núcleos para tarefas de baixa prioridade e, assim, desperdiçar energia / roubá-los de tarefas que precisariam deles.

Além disso, em um sistema de multiprocessamento assimétrico, normalmente é mais caro migrar tarefas para um núcleo diferente do que seria em um sistema SMP, portanto, o planejador geralmente tem que fazer uma boa estimativa inicial em vez de tentar rodar em um núcleo livre aleatório e mover isso mais tarde.


A escolha da Intel aqui é ter um número menor de núcleos inteligentes e rápidos idênticos, mas com escalonamento de frequência muito agressivo. Quando a CPU fica ocupada, ela alcança rapidamente a velocidade máxima do clock, faz o trabalho o mais rápido possível e, em seguida, reduz a escala para voltar ao modo de uso de energia mais baixo. Isso não impõe uma carga especial ao agendador e evita os cenários ruins descritos acima. É claro que, mesmo no modo de relógio baixo, esses núcleos são "inteligentes", então provavelmente consumirão mais do que os núcleos "estúpidos" grandes.


47



A heurística deve ser bem simples. Qualquer mudança de tarefa involuntária (uso de timeslice completo) é uma indicação de que a CPU lenta é inadequada para a tarefa. Utilização muito baixa e todas as opções de tarefas voluntárias indicam que a tarefa pode ser movida para a CPU lenta. - R..
Outro problema é que 4 núcleos estúpidos de 2GHz podem levar mais tamanho do que 2 núcleos inteligentes de 4GHz, ou podem ser menores e consumir muito menos energia do que os núcleos de 4GHz, mas funcionam muito mais lentamente - phuclv
@ R .: na linha de princípio, eu concordo com você, mas mesmo permitindo algum suporte básico de agendador para isso eu vi um núcleo ridículo empurrando uma placa ARM que eu usei, então deve haver algo mais nela. Além disso, a maioria dos softwares multithreaded "regulares" é escrita com o SMP em mente, portanto, não é incomum ver pools de threads tão grandes quanto o número total de núcleos, com tarefas arrastando os núcleos lentos. - Matteo Italia
@Ramhound: Uma peça de 120W de 10 núcleos tem um orçamento de energia de 12W por núcleo (exceto no modo turbo de núcleo único). É por isso que os maiores relógios de núcleo único são encontrados nas partes de quatro núcleos, onde, por exemplo, Da Intel i7-6700k tem um orçamento de energia de 91W para 4 núcleos: 22,75W por núcleo sustentado com todos os núcleos ativos (a 4,0GHz mesmo com uma carga de trabalho AVX2 + FMA como o Prime95). É também por isso que o headroom de núcleo único da Turbo é apenas um extra de 0,2 GHz, contra um Broadwell E5-2699v4 de 22 núcleos com base de 2.2 GHz @ 145W, 3.6GHz turbo. - Peter Cordes
@Ramhound: adicionado uma resposta que se expande sobre isso. Um Xeon de muitos núcleos parece ser exatamente O que o OP está procurando: operar tantos núcleos de baixa potência, ou gastar muita energia executando um único thread rápido quando possível (turbo). - Peter Cordes


O desempenho em jogos tende a ser determinado pela velocidade do núcleo único,

No passado (jogos da era DOS): Correto.
Hoje em dia, isso não é mais verdade. Muitos jogos modernos são segmentados e se beneficiam de vários núcleos. Alguns jogos já estão bastante satisfeitos com 4 núcleos e esse número parece aumentar com o tempo.

enquanto aplicativos como edição de vídeo são determinados pelo número de núcleos.

Tipo de verdade.

Número de núcleos * vezes a velocidade do núcleo * eficiência.
Se você comparar um único núcleo idêntico a um conjunto de núcleos idênticos, estará basicamente correto.

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 segmentos ou   mais núcleos. Por exemplo:

Intel Core i5 7600k, Freq Base 3,80 GHz, 4 núcleos      Intel Core i7 7700k, Freq Base 4.20 GHz, 4 Núcleos, 8 Linhas      AMD Ryzen 1600x, Freq Base 3.60 GHz, 6 Núcleos, 12 Threads      AMD Ryzen 1800x, Freq Base 3.60 GHz, 8 Núcleos, 16 Linhas

Comparar arquiteturas diferentes é perigoso, mas ok ...

Então, por que vemos esse padrão de núcleos crescentes com todos os núcleos tendo   a mesma velocidade de clock?

Parcialmente porque nos deparamos com uma barreira. Aumentar a velocidade do clock significa mais energia necessária e mais calor gerado. Mais calor significava ainda mais energia necessária. Nós tentamos dessa forma, o resultado foi o horrível pentium 4. Quente e com fome de poder. Difícil esfriar. E nem mesmo mais rápido do que o Pentium-M projetado com inteligência (um P4 a 3.0GHz era aproximadamente tão rápido quanto um P-mob a 1.7GHz).

Desde então, praticamente desistimos de acelerar o clock e, em vez disso, criamos soluções mais inteligentes. Parte disso foi usar vários núcleos em relação à velocidade bruta do clock.

Por exemplo. um único núcleo de 4 GHz pode consumir tanta energia e gerar tanto calor quanto três núcleos de 2 GHz. Se o seu software puder usar vários núcleos, será muito mais rápido.

Nem todo software pode fazer isso, mas softwares modernos normalmente podem.

O que responde parcialmente porque temos chips com múltiplos núcleos e porque vendemos chips com números diferentes de núcleos.

Quanto à velocidade do clock, acho que posso identificar três pontos:

  • CPUs de baixo consumo fazem sentido para alguns casos em que a velocidade bruta não é necessária. Por exemplo. Controladores de domínio, configurações de NAS ... Para estes, temos CPUs de frequência mais baixa. Às vezes, até mesmo com mais núcleos (por exemplo, CPU de 8x com baixa velocidade faz sentido para um servidor da Web).
  • Para o resto, geralmente estamos perto da frequência máxima que podemos fazer sem que nosso design atual fique muito quente. (digamos de 3 a 4GHz com designs atuais).
  • E além disso, fazemos binning. Nem todas as CPUs são geradas igualmente. Alguns pontos de CPU mal ou pontuação mal em parte de seus chips, têm essas partes desativadas e são vendidos como um produto diferente.

O exemplo clássico disso foi um chip AMD de 4 núcleos. Se um núcleo foi quebrado, ele foi desativado e vendido como um chip de 3 núcleos. Quando a demanda por esses 3 núcleos foi alta, até mesmo 4 núcleos foram vendidos como a versão de 3 núcleos, e com o software correto, você poderia reativar o 4º núcleo.

E isso não é feito apenas com o número de núcleos, também afeta a velocidade. Alguns chips ficam mais quentes que outros. Muito quente e vendê-lo como uma CPU de velocidade mais baixa (onde menor freqüência também significa menos calor gerado).

E depois há produção e marketing e isso estraga ainda mais.

Por que não temos variantes com diferentes velocidades de clock? ie. 2 núcleos 'grandes'   e muitos pequenos núcleos.

Nós fazemos. Em locais onde isso faz sentido (por exemplo, telefones celulares), geralmente temos um SoC com um CPU central lento (baixa potência) e alguns núcleos mais rápidos. No entanto, no típico PC desktop, isso não é feito. Isso tornaria a configuração muito mais complexa, mais cara e não há bateria para drenar.


14



Como indiquei - "Eu faço essa pergunta como um ponto geral - não especificamente sobre as CPUs que listei acima", e havia uma razão pela qual eu dei dois exemplos de cada arquitetura. Se tratarmos os dois cenários como 1. todos os grandes núcleos e 2. dois grandes e dois pequenos - então eu acho que Todos os pontos que você mencionou se aplicam a ambos os casos - ie. uma velocidade teórica máxima de núcleo único, colocação de chips, downclocking quando não estiver em uso. - Jamie
Um único núcleo de velocidade máxima não é tão interessante quando não é escolhido. Os agendadores precisarão ser atualizados para realmente preferir o (s) núcleo (s) de alta velocidade. - Hennes


Por que não temos variantes com diferentes velocidades de clock? Por exemplo, dois núcleos "grandes" e muitos núcleos pequenos.

A menos que estivéssemos extremamente preocupados com o consumo de energia, não faria sentido aceitar todo o custo associado a um núcleo adicional e não obter o máximo de desempenho possível desse núcleo. A velocidade máxima do clock é determinada em grande parte pelo processo de fabricação, e todo o chip é feito pelo mesmo processo. Então, qual seria a vantagem de tornar alguns dos núcleos mais lentos do que o processo de fabricação suportado?

Nós já temos núcleos que podem desacelerar para economizar energia. Qual seria o sentido de limitar seu desempenho máximo?


10



Isso é o que eu estava pensando. Por que usar intencionalmente alguns componentes inferiores quando todos podem ser de elite? +1. - MPW
@ MPW A escolha não é entre criar um núcleo grande e depois esterilizá-lo, é entre todos os grandes e alguns grandes e pequenos núcleos. Como você tem dois cenários concorrentes - desempenho de thread único e desempenho multithread - por que não maximizar os dois? Sabemos que você não pode fabricar um chip com alguns grandes e pequenos núcleos? - Jamie
@Jamie Você poderia fabricar um chip com alguns núcleos pequenos e grandes. Mas os núcleos menores não funcionariam com uma velocidade de clock menor. - David Schwartz
Eles fariam se fossem projetados dessa forma ... A questão é por que eles não são projetados desse jeito do zero, não tomando um processo de fabricação existente e castrando-o. - Jamie
@Jamie Eu não entendo o que você está dizendo. A CPU inteira deve ser feita com o mesmo processo de fabricação, e a velocidade máxima do clock é basicamente uma característica dos processos de fabricação. Os núcleos que exigem uma velocidade de clock menor no mesmo nível de fabricação geralmente Mais complexo e ter mais espaço, caso contrário, porque eles exigem uma velocidade de clock menor? - David Schwartz


Por que não temos variantes com diferentes velocidades de clock? Por exemplo, dois núcleos "grandes" e muitos núcleos pequenos.

Velocidades nominais de clock não significam muito para a maioria dos processadores maiores hoje em dia, já que todos eles têm a capacidade de se sincronizar para cima e para baixo. Você está perguntando se eles podem ou não marcar diferentes núcleos para cima e para baixo de forma independente.

Estou meio que surpreso com muitas das outras respostas. Processadores modernos podem e fazem isso. Você pode testar isso, por exemplo, abrindo o CPU-Z em um smartphone - meu Google Pixel é perfeitamente capaz de executar diferentes núcleos em diferentes velocidades:

É nominalmente 2,15 Ghz, mas dois núcleos estão em 1,593 Ghz e dois estão em 1,132 Ghz.

Na verdade, desde 2009, os principais processadores da Intel tiveram lógica para aumentar os núcleos individuais enquanto subclavam outros núcleos, permitindo um melhor desempenho de um único núcleo enquanto permanecem dentro de um orçamento de TDP: http://www.anandtech.com/show/2832/4

Processadores Intel mais novos com o "Favored Core" (um termo de marketing da Intel) têm cada núcleo caracterizado na fábrica, com os núcleos mais rápidos sendo capazes de aumentar ainda mais: http://www.anandtech.com/show/11550/the-intel-skylakex-review-core-i9-7900x-i7-7820x-and-i7-7800x-tested/7

Os chips Bulldozer da AMD tinham uma versão primitiva disso: http://www.anandtech.com/show/4955/the-bulldozer-review-amd-fx8150-tested/4

Novos chips Ryzen da AMD provavelmente tem isso também, embora não seja explicitamente declarado aqui: http://www.anandtech.com/show/11170/the-amd-zen-and-ryzen-7-review-a-deep-dive-on-1800x-1700x-and-1700/11


9



Você está respondendo a uma pergunta diferente. A questão é sobre muitos núcleos grandes versus alguns núcleos grandes e muitos núcleos pequenos - os méritos dos dois cenários. Em ambas as situações, você pode aumentar ou diminuir dependendo da demanda ou impulsionar um núcleo. - Jamie
Não é assim que eu li a pergunta. A questão não menciona núcleos arquitetonicamente diferentes, apesar de usar as palavras "grande" e "pequena". Concentra-se exclusivamente na velocidade do clock. - Grant Wu


Em um sistema moderno, você freqüentemente Faz tenha todos os núcleos funcionando em velocidades diferentes. Descer um núcleo que não é muito usado reduz o uso de energia e a saída térmica, o que é bom, e recursos como "turbo boost" permitem que um ou dois núcleos rodem significativamente mais rápido enquanto os outros núcleos estiverem ociosos e, portanto, o uso de energia e saída de calor de todo pacote Não vá muito alto. No caso de um chip com esse recurso, a velocidade que você vê na listagem é a velocidade mais alta que você pode obter com todos os núcleos de uma só vez. E por que todos os núcleos teriam a mesma velocidade máxima? Bem, eles são todos de um design idêntico, no mesmo chip físico, estabelecido com o mesmo processo de semicondutor, então por que eles deveriam ser diferentes?

A razão pela qual todos os núcleos são idênticos é porque isso torna mais fácil para um thread que está sendo executado em um núcleo em um ponto para iniciar a execução em um núcleo diferente em outro ponto. Como mencionado em outro lugar, existem chips comumente usados ​​que não faça siga este princípio de núcleos idênticos, ou seja, os processadores "big.LITTLE" da ARM. Embora na minha opinião a diferença mais importante entre os núcleos "grande" e "pequeno" não seja a velocidade do relógio (os núcleos "grandes" tendem a ser núcleos mais extravagantes, mais largos e mais especulativos que obtêm mais instruções por relógio ao custo de maior uso de energia, enquanto os "pequenos" núcleos aproximam-se mais das raízes de baixo consumo de energia, de ordem única da ARM), já que são designs diferentes no mesmo chip, eles geralmente também têm velocidades de clock máximas diferentes.

E indo ainda mais longe no campo da computação heterogênea, também está se tornando comum ver núcleos "CPU" e "GPU" integrados no mesmo chip. Estes têm designs completamente diferentes, executam conjuntos de instruções diferentes, são tratados de forma diferente e geralmente serão sincronizados de forma diferente também.


8





Rápido desempenho single-thread e taxa de transferência multithread muito alta é exatamente o que você obtém com uma CPU como Xeon E5-2699v4 da Intel.

É um Broadwell de 22 núcleos. A velocidade de clock sustentada é 2,2 GHz com todos os núcleos ativos (por exemplo, codificação de vídeo), mas o turbo max de um só núcleo é de 3,6 GHz.

Portanto, ao executar uma tarefa paralela, ele usa seu orçamento de energia de 145W como 22 núcleos de 6,6W. Mas ao executar uma tarefa com apenas alguns threads, o mesmo orçamento de energia permite que alguns núcleos turbo atinjam 3.6GHz. (O menor memória de núcleo único e largura de banda de cache L3 em um grande Xeon Isso significa que ele pode não rodar tão rápido quanto um quad-core de mesa a 3.6GHz. Um único núcleo em uma CPU Intel de desktop pode usar muito mais da largura de banda de memória total.

A velocidade nominal do clock de 2,2GHz é baixa devido aos limites térmicos. Quanto mais núcleos um processador tiver, mais lento ele precisará executar quando estiver ativo. Esse efeito não é muito grande nos CPUs de 4 e 8 núcleos que você mencionou na pergunta, porque 8 não são muitos núcleos e têm orçamentos de energia muito altos. Mesmo CPUs de desktop entusiastas mostram visivelmente esse efeito: O Skylake-X i9-7900X da Intel é uma parte 10c20t com base 3.3GHz, turbo máximo 4.5GHz.  Isso é muito mais headroom single-core turbo do que i7-6700k (4.0GHz sustentado / 4.2GHz turbo sem overclocking).

A escala de frequência / tensão (DVFS) permite que o mesmo núcleo opere em uma ampla faixa da curva de desempenho / eficiência.  Veja também esta apresentação IDF2015 sobre gerenciamento de energia Skylake, com muitos detalhes interessantes sobre o que os processadores podem fazer de maneira eficiente, e trocando desempenho versus eficiência, tanto estaticamente em tempo de design, quanto dinamicamente com o DVFS.

No outro extremo do espectro, os processadores Intel Core-M têm frequência sustentada muito baixa, como 1.2GHz a 4.5W, mas pode turbo até 2.9GHz. Com múltiplos núcleos ativos, eles rodam seus núcleos com uma velocidade de clock mais eficiente, como os gigantes Xeons.

Você não precisa de uma arquitetura de estilo big.LITTLE heterogênea para obter a maior parte do benefício. Os pequenos núcleos no ARM big.LITTLE são núcleos em ordem muito ruins que não são bons para o trabalho de computação. O ponto é apenas executar uma interface com muito pouca energia. Muitos deles não seriam ótimos para codificação de vídeo ou outros problemas sérios. (@ Lưu Vĩnh Phúc encontrou algumas discussões sobre por que o x86 não tem big.LITTLE. Basicamente, gastar silício extra em um núcleo extra-lento de baixa potência não valeria a pena para o uso típico de desktop / laptop.


enquanto aplicativos como edição de vídeo são determinados pelo número de núcleos. [Não seria 2x 4,0 GHz + 4x 2,0 GHz melhor em cargas de trabalho multiencadeadas do que 4x 4 GHz?]

Este é o seu mal-entendido chave. Você parece estar pensando que o mesmo número de pulsos de clock por segundo é mais útil se espalhado por mais núcleos. Isso nunca é o caso. É mais como

cores * perf_per_core * (scaling efficiency)^cores

(perf_per_core não é a mesma coisa que a velocidade do clock, porque um Pentium4 de 3GHz terá muito menos trabalho por ciclo de clock do que um Skylake de 3GHz.)

Mais importante, é muito raro que a eficiência seja 1.0. Alguns embaracantemente paralelo as tarefas são dimensionadas quase linearmente (por exemplo, compilar vários arquivos de origem). Mas codificação de vídeo é não Curtiu isso.  Para x264, o escalonamento é muito bom até alguns núcleos, mas fica pior com mais núcleos. por exemplo. Ir de 1 a 2 núcleos irá quase dobrar a velocidade, mas indo de 32 a 64 núcleos ajudará muito menos para uma típica codificação de 1080p. O ponto em que os platôs de velocidade dependem das configurações. (-preset veryslow faz mais análises em cada quadro e pode manter mais núcleos ocupados do que -preset fast).

Com muitos núcleos muito lentos, as partes de x264 com encadeamento único se tornariam gargalos. (por exemplo, a codificação bitstream final do CABAC. É o equivalente do gzip do h.264 e não faz paralelismo.) Ter alguns núcleos rápidos resolveria isso, se o sistema operacional soubesse como programá-lo (ou se x264 fixa os threads apropriados para núcleos rápidos).

O x265 pode tirar vantagem de mais núcleos do que o x264, já que ele tem mais análises a fazer, e o design do WPP do h.265 permite mais codificação e decodificação do paralelismo. Mas mesmo para 1080p, você fica sem paralelismo para explorar em algum momento.


Se você tem vários vídeos para codificar, fazendo vários vídeos em escalas paralelas, exceto pela competição por recursos compartilhados, como capacidade de cache L3 e largura de banda, e largura de banda de memória. Os núcleos menos rápidos poderiam obter mais benefícios com a mesma quantidade de cache L3, já que não precisariam trabalhar em tantas partes diferentes do problema de uma só vez.


7





Embora seja possível projetar computadores com partes diferentes em execução em velocidades independentes diferentes, a arbitragem de recursos geralmente requer a capacidade de decidir rapidamente qual solicitação atender primeiro, o que, por sua vez, exige saber se qualquer outra solicitação pode ter ocorrido em breve para ganhar prioridade. . Decidindo essas coisas, a maior parte do tempoé bem simples. Algo como um circuito "quiz buzzer" poderia ser implementado com apenas dois transistores. O problema é que tomar decisões rápidas que são de forma confiável inequívoca é difícil. A única maneira prática de fazer isso em muitos casos é usar uma decisão chamada "sincronizador", que pode evitar ambigüidades, mas introduz um atraso de dois ciclos. Poder-se-ia projetar um controlador de armazenamento em cache que pudesse arbitrar de forma confiável entre dois sistemas com relógios separados se estivesse disposto a tolerar um atraso de dois ciclos em cada operação para determinar quem ganhou a arbitragem. Tal abordagem seria menos do que útil, no entanto, se alguém quiser que um cache responda imediatamente a solicitações na ausência de contenção, uma vez que mesmo as solicitações não contestadas ainda teriam um atraso de dois ciclos.

Executar tudo fora de um clock comum evita a necessidade de sincronização, o que, por sua vez, evita um atraso de comunicação de dois ciclos toda vez que é necessário passar informações ou controlar sinais entre os domínios do clock.


4





Computadores desktop já fazem isso.

Eles têm (conjunto de) uma CPU (s), com 1-72 threads ativos ao mesmo tempo, e um (conjunto de) GPU (s), com 16-7168 unidades de computação.

Gráficos é um exemplo de uma tarefa que descobrimos que o trabalho paralelo massivo é eficiente. A GPU é otimizada para fazer o tipo de operações que queremos fazer gráficos (mas não é limitado a isso).

Este é um computador com alguns grandes núcleos e grande quantidade de pequenos núcleos.

Em geral, trocar um núcleo em X FLOPS por três núcleos em X / 2 FLOPS não vale a pena; mas trocar um núcleo em X FLOPS por cem núcleos em X / 5 FLOPS vale muito a pena.

Ao programar para isso, você gera um código muito diferente para a CPU e para a GPU. Muito trabalho é feito para dividir a carga de trabalho, para que a GPU obtenha as tarefas que são mais bem feitas na GPU, e a CPU obtém as tarefas que são mais bem feitas na CPU.

É sem dúvida muito mais fácil escrever código para uma CPU, porque o código massivamente paralelo é mais difícil de acertar. Então, só quando a recompensa é ampla Vale a pena negociar um desempenho de núcleo único para situações de múltiplos núcleos. As GPUs oferecem um grande retorno quando usadas corretamente.

Agora, os dispositivos móveis fazem isso por um motivo diferente. Eles têm núcleos de baixa potência que são significativamente mais lentos, mas usam significativamente menos energia por unidade de computação também. Isso permite que eles aumentem o tempo de vida da bateria quando não estão executando tarefas intensivas da CPU. Aqui temos um tipo diferente de "grande recompensa"; não desempenho, mas eficiência de energia. Ainda é preciso muito trabalho por parte do sistema operacional e, possivelmente, do criador de aplicativos para que isso funcione corretamente; apenas a grande recompensa valeu a pena.


4





A razão pela qual os sistemas comuns têm núcleos na mesma velocidade é um problema matemático simples. Tempo de entrada e saída (com otimizações) baseado em um único conjunto de constantes (que são escaláveis ​​= multiplicáveis ​​por um número de unidades).

E alguém aqui disse que os dispositivos móveis têm multi-cpus com velocidades diferentes. Isso não é verdade. Não é uma unidade central de processamento, se não for a unidade de processamento central; não importa o que o fabricante diga que é ou não é. nesse caso [não é uma cpu] é apenas um "pacote de suporte".


-1