Resposta simples

Resposta simples

Em 2014, ouvi muitas linguagens de programação elogiadas por seus recursos de simultaneidade. Diz-se que a simultaneidade é crucial para ganhos de desempenho.

Ao fazer esta afirmação, muitas pessoas apontam para um artigo de 2005 chamadoO almoço grátis acabou: uma virada fundamental em direção à simultaneidade em software. O argumento básico é que está cada vez mais difícil aumentar a velocidade do clock dos processadores, mas ainda podemos colocar mais núcleos em um chip e que, para obter ganhos de desempenho, o software precisará ser escrito para aproveitar as vantagens dos múltiplos núcleos.

Algumas citações importantes:

Estamos acostumados a ver CPUs de 500 MHz darem lugar a CPUs de 1 GHz, dando lugar a CPUs de 2 GHz e assim por diante. Hoje estamos na faixa de 3GHz em computadores convencionais.

A questão chave é: quando isso vai acabar? Afinal de contas, a Lei de Moore prevê o crescimento exponencial, e é evidente que o crescimento exponencial não pode continuar para sempre antes de atingirmos limites físicos rígidos; a luz não está ficando mais rápida. O crescimento deverá eventualmente desacelerar e até mesmo terminar.

... Tornou-se cada vez mais difícil explorar velocidades de clock mais altas devido não apenas a um, mas a vários problemas físicos, principalmente calor (muito e muito difícil de dissipar), consumo de energia (muito alto) e problemas de vazamento de corrente.

... O futuro da Intel e da maioria dos fornecedores de processadores está em outro lugar, à medida que as empresas de chips buscam agressivamente as mesmas novas direções multicore.

...Multicore consiste em executar duas ou mais CPUs reais em um chip.

As previsões deste artigo parecem ter se mantido, mas não entendo por quê. Tenho apenas ideias muito vagas sobre como o hardware funciona.

Minha visão simplificada é "está cada vez mais difícil colocar mais poder de processamento no mesmo espaço" (devido a problemas com calor, consumo de energia, etc.). Eu esperaria que a conclusão fosse "portanto, teremos que ter computadores maiores ou executar nossos programas em vários computadores". (E, de fato, a computação em nuvem distribuída é algo sobre o qual ouvimos mais falar.)

Mas parte da solução parece ser arquiteturas multi-core. A menos que os computadores cresçam em tamanho (o que não aconteceu), esta parece ser apenas outra maneira de dizer "concentre mais poder de processamento no mesmo espaço".

Por que “adicionar mais núcleos” não enfrenta as mesmas limitações físicas que “tornar a CPU mais rápida”?

Por favor, explique nos termos mais simples que puder. :)

Responder1

Resumo

  • Economia. É mais barato e mais fácil projetar uma CPU que tenha mais núcleos do 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 mais baixa no espaço térmico necessário para aumentar a velocidade do clock em 25%. Quádruplo por 50%.

  • Existem outras maneiras de aumentar a velocidade de processamento sequencial, e os fabricantes de CPU fazem bom uso delas.


Vou me basear fortemente nas excelentes respostas emessa questãoem um de nossos sites irmãos SE. Então, vote neles!


Limitações de velocidade do clock

Existem algumas limitações físicas conhecidas para a velocidade do clock:

  • Tempo de transmissão

    O tempo que um sinal elétrico leva para percorrer um circuito é limitado pela velocidade da luz. Este é um limite rígido e não existe nenhuma maneira conhecida de contorná-lo 1 . Em relógios gigahertz, estamos nos aproximando desse limite.

    No entanto, ainda não chegamos lá. 1 GHz significa um nanossegundo por clock. Nesse tempo, a luz pode viajar 30 cm. A 10 GHz, a luz pode viajar 3 cm. Um único núcleo de CPU tem cerca de 5 mm de largura, então encontraremos esses problemas em algum lugar além de 10 GHz. 2

  • Atraso de comutação

    Não basta apenas considerar o tempo que um sinal leva para viajar de uma extremidade a outra. Também precisamos considerar o tempo que uma porta lógica dentro da CPU leva para mudar de um estado para outro! À medida que aumentamos a velocidade do clock, 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 potência 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 problema. Citando deresposta de fuzzyhair2:

    Processadores recentes são fabricados com tecnologia CMOS. Cada vez que há um ciclo de clock, a energia é dissipada. Portanto, velocidades mais altas do processador significam mais dissipação de calor.

    Há algumas medidas lindas emeste tópico do fórum AnandTech, e até derivaram uma fórmula para o consumo de energia (que anda de mãos dadas com o calor gerado):

    Fórmula
    Crédito paraEu não ligo

    Podemos visualizar isso no gráfico a seguir:

    Gráfico
    Crédito paraEu não ligo

    Como você pode ver, o consumo de energia (e o calor gerado) aumenta extremamente rapidamente à medida que a velocidade do clock aumenta além de um certo ponto. Isso torna impraticável aumentar ilimitadamente a velocidade do clock.

    A razão para o rápido aumento no uso de energia está provavelmente relacionada ao atraso de comutação - não é suficiente simplesmente aumentar a potência proporcionalmente à frequência do clock; a tensão também deve ser aumentada para manter a estabilidade em clocks mais altos. Isto pode não estar completamente correto; sinta-se à vontade para apontar correções em um comentário ou fazer uma edição nesta resposta.


Mais núcleos?

Então, por que mais núcleos? Bem, não posso responder isso definitivamente. Você teria que perguntar ao pessoal da Intel e da AMD. Mas você pode ver acima que, com CPUs modernas, em algum momento torna-se impraticável aumentar a velocidade do clock.

Sim, o multicore também aumenta a potência necessária e a dissipação de calor. Mas evita perfeitamente o tempo de transmissão e problemas de atraso de comutação. E, como você pode ver no gráfico, você pode facilmente dobrar o número de núcleos em uma CPU moderna com a mesma sobrecarga térmica que um aumento de 25% na velocidade do clock.

Algumas pessoas fizeram isso - o atualrecorde mundial de overclocké apenas tímido de 9 GHz. Mas é um desafio de engenharia significativo fazer isso e ao mesmo tempo manter o consumo de energia dentro de limites aceitáveis. Os designers em algum momento decidiram que adicionar mais núcleos para realizar mais trabalhoem paraleloproporcionaria um impulso mais eficaz ao desempenho na maioria dos casos.

É aí que entra a economia - provavelmente era mais barato (menos tempo de design, menos complicado de fabricar) seguir o caminho multicore. E é fácil de comercializar - quem não ama o novoocta-corelasca? (Claro, sabemos que multicore é bastante inútil quando o software não faz uso dele...)

éuma desvantagem do multicore: você precisa de mais espaço físico para colocar o núcleo extra. No entanto, os tamanhos dos processos da CPU diminuem constantemente, por isso há muito espaço para colocar duas cópias de um design anterior - a verdadeira desvantagem é não ser capaz de criar núcleos únicos maiores e mais complexos. Então, novamente, aumentar a complexidade central é umacoisa ruimdo ponto de vista do design - mais complexidade = mais erros/bugs e erros de fabricação. Parece que encontramos um meio termo com núcleos eficientes que são simples o suficiente para não ocupar muito espaço.

Já atingimos um limite com o número de núcleos que podemos colocar em uma única matriz nos tamanhos de processo atuais. Poderemos atingir um limite de até onde poderemos 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 clock. 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 do que as mais antigas com a mesma velocidade de clock?

A velocidade do clock é, na verdade, apenas uma aproximação 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 tiques, etc.

O que é mais significativo é o número deinstruçõesvocê pode executar por unidade de tempo. Esta é uma medida muito melhor de quanto um único núcleo de CPU pode realizar. Algumas instruções; alguns levarão um ciclo de clock, outros levarão 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. Como? Bem, você poderia tornar uma instrução mais eficiente - talvez a divisão agora leve apenas dois ciclos. Então hápipeline 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 tem uma ordem sequencial bem definida, respectiva às instruções anteriores e posteriores, portanto, não requer suporte de software como multicore faz.

outromaneira: instruções mais especializadas. Vimos coisas como o SSE, que fornece instruções para processar grandes quantidades de dados de uma só vez. Existem novos conjuntos de instruções sendo constantemente introduzidos com objetivos semelhantes. Estes, novamente, requerem suporte de software e aumentam a complexidade do hardware, mas fornecem um bom aumento de desempenho. Recentemente, surgiu o AES-NI, que fornece criptografia e descriptografia AES aceleradas por hardware, muito mais rápido do que um monte de aritmética implementada em software.


1 De qualquer forma, não sem nos aprofundarmos bastante na física quântica teórica.

2 Na verdade, pode ser menor, uma vez que 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 distâncias em linha reta - é provável que haja pelo menos um caminho consideravelmente mais longo que uma linha reta.

Responder2

Física é física. Não podemos continuar empacotando mais transistores em espaços cada vez menores para sempre. Em algum momento, ele fica tão pequeno que você lida com uma porcaria quântica estranha. Em algum momento não podemos fazer as malasduas vezestantos transistores em um ano quanto costumávamos (que é o assunto da lei de Moore).

As velocidades de clock brutas não significam nada. Meu antigo Pentium M tinha cerca de metade da velocidade de clock de uma CPU de desktop contemporânea (e ainda assim, em muitos aspectos,mais rápido) – e os sistemas modernos sãopor muito poucoaproximando-se das velocidades dos sistemas há 10 anos (e são claramente mais rápidas). Basicamente, 'apenas' aumentar a velocidade do clock não proporciona ganhos reais de desempenho em muitos casos. Pode ajudar emalgunsoperações singlethreaded, mas é melhor gastar o orçamento de design em melhor eficiência em termos de todo o resto.

Vários núcleos permitem que você façadois ou mais coisas ao mesmo tempo, então você não precisa esperar que uma coisa termine para a próxima. No curto prazo, você pode simplesmente colocar dois núcleos existentes no mesmo pacote(por exemplo, com oPentium Ds, e seu MCM, que era um design de transição) e você tem um sistema duas vezes mais rápido. A maioria das implementações modernas compartilha coisas como um controlador de memória, é claro.

Você também pode construir de maneira mais inteligente de diferentes maneiras. ARM faz Big-Little – tendo 4 núcleos 'fracos' de baixo consumo de energia trabalhando ao lado de 4 núcleos mais poderosos para que você tenha o melhor dos dois mundos. A Intel permite diminuir o acelerador (para melhor eficiência de energia) ou fazer overclockespecíficonúcleos (para melhor desempenho de thread único). Lembro que a AMD faz algo com módulos.

Você também pode mover coisas como controladores de memória (para ter menor latência) e funções relacionadas a IO (a CPU moderna não tem ponte norte), bem como vídeo (que é mais importante com laptops e design AIW). Faz mais sentido fazer essas coisas do que “apenas” aumentar a velocidade do clock.

Em algum momento, 'mais' núcleos podem não funcionar – embora as GPUs tenhamcentenasde núcleos.

Multicores, como tal, permitem que os computadores funcionemmais espertode todas essas maneiras.

Responder3

Resposta simples

A resposta mais simples para a pergunta

Por que “adicionar mais núcleos” não enfrenta as mesmas limitações físicas que “tornar a CPU mais rápida”?

é realmente encontrado em outra parte da sua pergunta:

Eu esperaria que a conclusão fosse "portanto, teremos que ter computadores maiores ou executar nossos programas em vários computadores".

Em essência, múltiplos núcleos é como ter vários “computadores” no mesmo dispositivo.

Resposta complexa

Um "núcleo" é a parte do computador que realmente processa instruções (somar, multiplicar, "e" etc.). Um núcleo só pode executar uma única instrução por vez. Se você deseja que seu computador seja "mais poderoso", há duas coisas básicas que você pode fazer:

  1. Aumentar o rendimento (aumentar a taxa de clock, diminuir o tamanho físico, etc.)
  2. Use mais núcleos no mesmo computador

As limitações físicas do número 1 são principalmente a necessidade de descarregar o calor causado pelo processamento e pela velocidade de um elétron no circuito. Depois de dividir alguns desses transistores em um núcleo separado, você alivia em grande parte o problema de calor.

Há uma limitação importante no número 2: você precisa ser capaz de dividir seu problema em váriosindependenteproblemas e, em seguida, combine a resposta. Em um computador pessoal moderno, isso não é realmente um problema, pois há muitos problemas independentes, todos competindo pelo tempo computacional com o(s) núcleo(s). Mas ao resolver problemas computacionais intensivos, múltiplos núcleos só ajudam realmente se o problema for passível de simultaneidade.

Responder4

Resumindo a história: a aceleração de núcleos únicos atingiu o seu limite, por isso continuamos a reduzi-los e a adicionar mais, até atingir o seu limite ou podemos mudar para materiais melhores (ou alcançar um avanço fundamental que derrube a tecnologia estabelecida, algo como computação quântica de tamanho doméstico e realmente funcional).

Acho que esse problema é multidimensional e será necessário escrever um pouco para pintar um quadro mais completo:

  1. Limitações físicas (impostas pela física real): como velocidade da luz, mecânica quântica, tudo isso.
  2. Problemas de fabricação: Como fabricar estruturas cada vez menores com a precisão necessária? Problemas relacionados à matéria-prima, materiais usados ​​para construir circuitos, etc., durabilidade.
  3. Problemas arquitetônicos: Calor, inferência, consumo de energia etc.
  4. Problemas econômicos: Qual a maneira mais barata de conseguir mais desempenho para o usuário?
  5. Casos de uso e percepção do usuário sobre desempenho.

Pode haver muitos mais. Uma CPU multifuncional está tentando encontrar uma solução para embaralhar todos esses fatores (e mais) em um chip de produção em massa que cabe em 93% dos itens no mercado. Como você pode ver, o último ponto é o mais crucial, a percepção do cliente, que deriva diretamente da maneira como o cliente usa a CPU.

Pergunte a si mesmo qual é a sua aplicação habitual? Talvez: 25 abas do Firefox, cada uma reproduzindo alguns anúncios em segundo plano, enquanto você ouve música, enquanto espera que seu trabalho de construção que você começou há cerca de 2 horas termine. É muito trabalho a ser feito e ainda assim você deseja uma experiência tranquila. Mas sua CPU pode realizar UMA tarefa por vez! Numa única coisa. Então o que você faz é dividir as coisas e fazer uma fila muuuuito longa e cada um recebe sua parte e todos ficam felizes. Exceto você, porque todas as coisas ficam lentas e nada suaves.

Assim você acelera sua CPU, para realizar mais operações no mesmo tempo. Mas como você disse: consumo de calor e energia. E é aí que chegamos à parte da matéria-prima. O silício se torna mais condutivo à medida que fica mais quente, o que significa que mais corrente flui através do material à medida que você o aquece. Os transistores têm um consumo de energia maior à medida que você os troca mais rapidamente. Além disso, as altas frequências pioram a diafonia entre fios curtos. Então você vê, a abordagem de acelerar as coisas levará a um “colapso”. Enquanto não tivermos matérias-primas melhores que o silício ou transistores muito melhores, ficaremos presos onde estamos com a velocidade de núcleo único.

Isso nos leva de volta ao ponto de partida. Fazendo as coisas, em paralelo. Vamos adicionar outro núcleo. Agora podemos realmente fazer duas coisas ao mesmo tempo. Então, vamos esfriar um pouco as coisas e apenas escrever um software que possa dividir seu trabalho em dois núcleos menos poderosos, mas mais funcionais. Essa abordagem tem dois problemas principais (além de precisar de tempo para que o mundo do software se adapte a ela): 1. Aumentar o chip ou diminuir o núcleo individual. 2. Algumas tarefas simplesmente não podem ser divididas em duas partes executadas simultaneamente. Continue adicionando núcleos enquanto puder reduzi-los ou aumente o chip e evite o problema de aquecimento. Ah, e não vamos esquecer o cliente. Se mudarmos os nossos casos de utilização, as indústrias terão de se adaptar. Veja todas as novidades brilhantes que o setor móvel criou. É por isso que o setor móvel é considerado tão crucial e todos querem ter acesso a ele.

Sim, esta estratégia IRÁ atingir as suas limitações! E a Intel sabe disso, é por isso que dizem que o futuro está em outro lugar. Mas continuarão a fazê-lo, desde que seja barato, eficaz e exequível.

Por último, mas não menos importante: física. A mecânica quântica limitará o encolhimento dos cavacos. A velocidade da luz ainda não é um limite, uma vez que os elétrons não podem viajar à velocidade da luz no silício; na verdade, é muito mais lento que isso. Além disso, é a velocidade do impulso que limita a velocidade oferecida por um material. Assim como o som viaja mais rápido na água do que no ar, os impulsos elétricos viajam mais rápido, por exemplo, no grafeno do que no silício. Isso leva de volta às matérias-primas. O grafeno é ótimo no que diz respeito às suas propriedades elétricas. Seria um material muito melhor para construir CPUs, infelizmente é muito difícil produzir em grandes quantidades.

informação relacionada