Em 2014, ouço muitas linguagens de programação apontadas por seus recursos de simultaneidade. Diz-se que a simultaneidade é crucial para obter ganhos de desempenho.
Ao fazer essa afirmação, muitas pessoas apontam para um artigo de 2005 chamado O almoço grátis acabou: uma mudança fundamental em direção à concorrência em software . O argumento básico é que está ficando mais difícil aumentar a velocidade de 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 tirar proveito de vários núcleos.
Algumas citações principais:
Estamos acostumados a ver as CPUs de 500 MHz darem lugar às CPUs de 1 GHz e as de 2 GHz, e assim por diante. Hoje estamos na faixa de 3GHz nos computadores convencionais.
A questão principal é: quando isso terminará? Afinal, a Lei de Moore prevê crescimento exponencial, e o crescimento claramente 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 deve eventualmente desacelerar e até terminar.
... Tornou-se cada vez mais difícil explorar velocidades de clock mais altas devido a não apenas um, mas vários problemas físicos, notavelmente 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, enquanto as empresas de chips buscam agressivamente as mesmas novas direções multicore.
... Multicore é sobre a execução de duas ou mais CPUs reais em um chip.
As previsões deste artigo parecem ter aguentado, mas não entendo o porquê. Eu tenho apenas idéias muito vagas sobre como o hardware funciona.
Minha visão simplista é "está ficando 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 estamos ouvindo mais.)
Mas parte da solução parece ser arquiteturas multinúcleo. A menos que os computadores aumentem de tamanho (o que eles não têm), isso parece ser outra maneira de dizer "coloque mais poder de processamento no mesmo espaço".
Por que "adicionar mais núcleos" não enfrenta as mesmas limitações físicas de "tornar a CPU mais rápida"?
Por favor, explique da forma mais simples possível. :)
fonte
Respostas:
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 :
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.
fonte
exponential
é usada. Este é um uso perfeitamente válido da palavra, e seria tangível ao ponto desta resposta ficar atolado em detalhes matemáticos. Se você realmente deseja tentar "corrigi-lo", fique à vontade para sugerir uma edição. Não caberá a mim se for aceito ou não, desde que você não mude significativamente o significado.Física é física. Não podemos continuar embalando mais transistores em espaços cada vez menores para sempre. Em algum momento, fica tão pequeno que você lida com uma porcaria quântica estranha. Em algum momento, não podemos empacotar duas vezes mais transistores em um ano do que costumávamos (que é a lei de moore).
Relogios-primas não significam nada. Meu antigo Pentium M tinha cerca de metade da velocidade de clock de uma CPU de desktop contemporânea (e, em muitos aspectos, mais rápido ) - e os sistemas modernos mal se aproximam da velocidade dos sistemas há 10 anos (e são claramente mais rápidos). Basicamente, "apenas" aumentar a velocidade do relógio não oferece ganhos reais de desempenho em muitos casos. Pode ajudar em algumas operações com um único filtro, mas é melhor gastar o orçamento do projeto com maior eficiência em termos de tudo o mais.
Vários núcleos permitem fazer duas ou mais coisas ao mesmo tempo, para que você não precise esperar que uma coisa termine na próxima. No curto prazo, você pode simplesmente colocar dois núcleos existentes no mesmo pacote (por exemplo, com o Pentium Ds e seu MCM, que era um design de transição) e você tem um sistema duas vezes mais rápido. As implementações mais modernas compartilham coisas como um controlador de memória, é claro.
Você também pode criar de forma mais inteligente de maneiras diferentes. O ARM faz o Big-Little - tendo 4 núcleos de baixa potência 'fracos' trabalhando ao lado de 4 núcleos mais poderosos, para que você tenha o melhor dos dois mundos. A Intel permite que você acelere (para melhor eficiência de energia) ou faça overclock de núcleos específicos (para melhor desempenho de thread único). Lembro que a AMD faz algo com os módulos.
Você também pode mover coisas como controladores de memória (para ter menor latência) e funções relacionadas à IO (a CPU moderna não possui ponte norte), bem como vídeo (o que é mais importante com laptops e design AIW). Faz mais sentido fazer essas coisas do que "apenas" continuar aumentando a velocidade do relógio.
Em algum momento, 'mais' núcleos podem não funcionar - embora as GPUs tenham centenas de núcleos.
Multicores, como tal, permitem que os computadores trabalhem de maneira mais inteligente em todas essas maneiras.
fonte
wierd quantum crap
+ 1 só por isso!Resposta simples
A resposta mais simples para a pergunta
é realmente encontrado em outra parte da sua pergunta:
Em essência, vários núcleos são como ter vários "computadores" no mesmo dispositivo.
Resposta complexa
Um "núcleo" é a parte do computador que realmente processa as instruções (adição, multiplicação "e" ing, etc). Um núcleo pode executar apenas uma única instrução ao mesmo tempo. Se você deseja que seu computador seja "mais poderoso", há duas coisas básicas que você pode fazer:
As limitações físicas do número 1 são principalmente a necessidade de descarregar o calor causado pelo processamento e a velocidade de um elétron no circuito. Depois de separar alguns desses transistores em um núcleo separado, você alivia o problema de calor em grande parte.
Há uma limitação importante ao item 2: você precisa dividir seu problema em vários problemas independentes e depois combinar a resposta. Em um computador pessoal moderno, isso não é realmente um problema, pois há muitos problemas independentes disputando o tempo computacional com o (s) núcleo (s) de qualquer maneira. Porém, ao fazer problemas computacionais intensivos, vários núcleos realmente ajudam apenas se o problema for passível de simultaneidade.
fonte
Eles enfrentam as mesmas limitações físicas, mas a mudança para o design multicore nos dá algum espaço para respirar antes de atingirmos alguns deles. Ao mesmo tempo, surgem outros problemas causados por essas limitações, mas são mais fáceis de serem superados.
Fato 1: O consumo de energia e o calor emitido crescem mais rapidamente que a energia computacional. Pressionar uma CPU de 1 GHz a 2 GHZ aumentará o consumo de energia de 20 W para 80 W, o mesmo com o calor dissipado. (Acabei de inventar esses números, mas é bem assim que funciona)
Fato 2: Comprar a segunda CPU e rodar as duas a 1 GHz dobraria sua potência computacional. Duas CPUs rodando a 1 GHz poderiam processar a mesma quantidade de dados que uma CPU de 2 GHz, mas cada uma consumiria apenas 20 W de energia, ou seja, 40 W no total.
Lucro: dobrar o número da CPU em vez da frequência do relógio economiza um pouco de energia e não estamos tão próximos da "barreira da frequência" como antes.
Problema: você precisa dividir o trabalho entre duas CPUs e combinar os resultados posteriormente.
Se você pode resolver esse problema em tempo aceitável e usando menos energia do que acabou de economizar, acabou de lucrar graças ao uso de várias CPUs.
Agora você só precisa mesclar duas CPUs em uma CPU de núcleo duplo e estará em casa. Isso é benéfico porque os núcleos podem compartilhar algumas partes da CPU, por exemplo, cache ( resposta relacionada ).
fonte
Para encurtar a história: A aceleração de núcleos únicos atingiu seus limites, por isso continuamos diminuindo-os e adicionando mais deles, até que chegue a seus limites ou possamos mudar para materiais melhores (ou obter uma inovação fundamental que derrube a tecnologia estabelecida, algo como computação quântica de tamanho doméstico, realmente funcionando).
Penso que este problema é multidimensional e será necessário escrever para pintar a imagem mais completa:
Pode haver muito 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 se encaixa em 93% dos assuntos no mercado. Como você vê, o último ponto é o mais crucial, a percepção do cliente, que é diretamente derivada 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 aguarda o trabalho de criação que você iniciou há duas horas para terminar. Isso é muito trabalho a ser feito e você ainda deseja uma experiência tranquila. Mas sua CPU pode lidar com UMA tarefa ao mesmo tempo! Em uma única coisa. Então, o que você faz é dividir as coisas e formar uma fila muito longa, e cada um recebe a sua parte e todos ficam felizes. Exceto por você, porque todas as coisas ficam lentas e nada lisas.
Então, você acelera sua CPU, a fim de realizar mais operações no mesmo período de 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 condutor à medida que esquenta, o que significa que mais corrente flui através do material à medida que você o aquece. Os transistores têm um consumo de energia mais alto à medida que você os troca mais rapidamente. Também as altas frequências pioram a interferência entre os fios curtos. Como você vê, a abordagem de acelerar as coisas levará a um "colapso". Desde que não tenhamos melhores matérias-primas que o silício ou transistores muito melhores, estamos presos onde estamos com velocidade de núcleo único.
Isso nos leva de volta para onde começamos. Fazendo 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 escrever um software que possa dividir seu trabalho em dois núcleos menos poderosos, mas mais funcionais. Essa abordagem possui dois problemas principais (além de precisar de tempo para o mundo do software se adaptar a ela): 1. Aumente o chip ou diminua o núcleo individual. 2. Algumas tarefas simplesmente não podem ser divididas em duas partes que são executadas simultaneamente. Continue adicionando núcleos enquanto puder encolhê-los ou aumente o chip e mantenha o problema de calor distante. Ah, e não vamos esquecer o cliente. Se mudarmos nossos casos de uso, as indústrias terão que se adaptar. Veja todas as coisas "novas" brilhantes que o setor móvel criou.
Sim, essa estratégia alcançará suas limitações! E a Intel sabe disso, é por isso que eles dizem que o futuro está em outro lugar. Mas eles continuarão fazendo isso enquanto for barato, eficaz e factível.
Por último, mas não menos importante: física. A mecânica quântica limitará o encolhimento de cavacos. A velocidade da luz ainda não é um limite, já que os elétrons não podem viajar na velocidade da luz no silício, na verdade é muito mais lento que isso. Além disso, é a velocidade de 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 a suas propriedades elétricas. Seria um material muito melhor para a construção de CPUs, infelizmente é muito difícil produzir em grande quantidade.
fonte
Digamos (como um exemplo irrealista, mas ainda deve ser claro) que você tem uma CPU que está funcionando a 100F. Como o multicore geralmente funciona é pegar a frequência do clock que a CPU está executando a 100F e abaixá-la, diminuindo um pouco a velocidade. Como não está mais funcionando tão quente, eles podem colocar um segundo, terceiro ou mesmo um quarto ao lado, sem afetar significativamente a temperatura geral da CPU e obter os benefícios do multicore. Obviamente, isso vem com alguma sobrecarga, pois os núcleos ainda precisam ser controlados de um local, por um núcleo. Quanto mais núcleos você adicionar, maior será a sobrecarga. Quanto aos núcleos únicos, quanto mais você aumenta a velocidade deles, mais calor eles geram. Obviamente, isso tem limitações físicas (ou seja, depois de um certo ponto, começa a se tornar prejudicial ao desempenho,
À medida que o tempo passa, eles descobriram maneiras de diminuir o tamanho físico das CPUs, e é por isso que ainda não cumprimos a exigência de precisar de mais espaço; no entanto, por exemplo, 16 CPUs principais não existem (em fora do equipamento de nível de servidor devido às limitações de tamanho físico, pois as CPUs de nível de servidor são significativamente maiores fisicamente do que o nível de consumidor padrão.
fonte
CPU = Motor do carro: é mais fácil fabricar um carro mais potente com 16 válvulas, ou seja, uma lamborghini, do que um carro de alta rotação que teria uma válvula / cilindro gigante a 100 000 rpm.
As razões são físicas e químicas, o silício precisa ser substituído por um combustível de foguete computacional para alterar o equilíbrio entre o número de núcleos e a velocidade do núcleo.
fonte
Eu diria que a principal restrição aos limites de potência computacional está relacionada principalmente ao limite de quão rápido podemos mover o elétron através de um circuito (
velocidade daderiva eletrônicade luz). Existem muitos outros fatores como você mencionou.A adição de núcleos adicionais não tornaria o processador mais rápido, embora isso permitisse processar mais na mesma quantidade de tempo.
A Lei de Moore é uma leitura muito interessante e informativa. Esta citação em particular é relevante aqui:
fonte
Longa história ainda mais curta:
Realmente não precisamos de CPUs mais rápidas. Fora de alguns usos altamente especializados *, a CPU não é o gargalo há anos - todos os bits periféricos, como memória, armazenamento e rede, geralmente fazem com que a CPU aguarde milhões de ciclos de clock durante os quais pode fazer outras coisas. Um segundo núcleo pode fazer mais "outras coisas", produzindo assim uma percepção de maior desempenho para o usuário.
Muitos dispositivos móveis, laptops, etc., suportam a CPU para melhorar a duração da bateria e temperaturas mais baixas. Não há muito incentivo para desenvolver um núcleo ARM de 3,5 GHz, se o seu principal cliente o executa em 1,3 GHz.
fonte
Resposta curta e simples:
Por que não passar de 1 caminhão transportando mercadorias para 100 caminhões transportando 100 vezes mais, enfrenta as mesmas limitações físicas que ir de 1 caminhão dirigindo a 100 km / h a 1 caminhão dirigindo a 10.000 km / h?
Responda a essa pergunta, e sua pergunta também será respondida. O conceito é aproximadamente o mesmo.
fonte
Eu acho que outro fator é a temperatura. Se você aumentar a frequência do relógio, a temperatura do núcleo aumentará. Se você adicionar mais núcleos, mesmo que o consumo de energia suba, ele será distribuído pelos núcleos, para que a temperatura permaneça a mesma (como se você adicionar dois líquidos quentes, na mesma temperatura, um ao outro, a temperatura permanecerá a mesma )
Outra razão é que o aumento da frequência do relógio tende a aumentar o consumo de energia em um quadrado do fator que você aumenta a frequência (dependendo de quais outras barreiras você está atingindo em um determinado ponto). Portanto, aumentar a frequência do clock aumenta o consumo de energia em um quadrado, enquanto adicionar mais núcleos apenas o aumenta linearmente.
fonte
A resposta para o porquê "não adicionar mais núcleos" enfrenta as mesmas limitações físicas que a pergunta "acelera a CPU" é que um sistema multicore enfrenta exatamente as mesmas limitações que uma CPU de núcleo único. Chegamos a um ponto em que não temos realmente a opção de acelerar um sistema de núcleo único, por isso o fizemos para que possamos fazer mais coisas ao mesmo tempo. Atualmente, os desafios de tamanho e coordenação são mais fáceis de resolver do que ir mais rápido. A desvantagem é que, se uma tarefa não pode ser dividida em partes, talvez não acabemos indo muito mais rápido do que um sistema único.
fonte
Você não pode acelerar a CPU simplesmente colocando mais portas. Por fim, as instruções devem ser executadas e cada instrução requer várias operações de "comutação". Existem limites físicos fundamentais (mecânica quântica - o Princípio da Incerteza) que dificultam o aumento da "velocidade do clock" de uma CPU além da velocidade dos atuais sistemas de ponta.
fonte